对IOC&AOP的理解

对IOC&AOP的理解

1.IOC

IOC/DI:控制翻转,对并的创建,初始化,销毁等等工作就交给Spring容器 ,简化程序员的工作量,不需自己去new对象也不需要为维护对象之间的依赖关系了,因为DI实现了对象之间的依赖。

1.1Spring的IOC启动原理

Spring启动扫描配置(XML,Java配置)       -> 扫描配置
解析配置,解析Bean的定义,封装成BeanDefinition   -> 解析配置
BeanDefinitionRegister注册器,注册BeanDefinition ,保存到   ConcurrentHashMap中
如果迫切初始化Bean ,启动的时候就会根据BeanDefinition通过反射实例化Bean,存储到一个HashMap中缓存
当getBean时候,如果是单例Bean 会从 缓存Bean的HashMap中尝试获取,如果获取不到就用反射创建一个Bean,存入HashMap中缓存,然后返回 
当getBean时候,如果多例Bean,会每次都用反射创建一个实例返回,不会缓存。

2.AOP

面向切面编程 ,它可以做到面向对象不能做到的一些事情,比如:要在每个方法执行前开启事物,执行后提交事物,如果使用面向对象的思想就只能在每个方法第代码的第一行开启事物,最后一行提交事物,因为面向对象只能操作一个一个对象 , 这样的问题就是大量重复的代码,事物的代码就污染了我方法本身的代码 ,代码侵入性,耦合性都比较高。 使用面向切面就可以做到把这些公共的代码统一抽取出来,实现代码的解耦。方法本身就只关心方法本身的业务 ,事务的业务代码交给了AOP去实现。

2.1Spring的AOP启动原理

底层使用动态代理来是实现的,默认基于JDK动态代理,如果灭有接口的类,是使用CGLIB

2.2如何实现

对于Spring我们可以定义切点,比如我的所有service方法要做事务,我们的切点就配置service, 然后可以定义切面,切面中就可以去实现我们增强的业务逻辑,比如事务,日志

猜你喜欢

转载自blog.csdn.net/weixin_53587810/article/details/113189007
今日推荐