IOC(Inversion of Control)控制反转
IoC是一种Java编程模式。IoC对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
DI(Dependency Injection)即“依赖注入”:通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可以指定目标需要的资源,完成自身的业务逻辑,而不需要关系具体的资源由谁提供。
IoC是Spring的核心,贯穿始终。对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。
Spring中DI有两种实现方式—Setter方式(传值方式)和构造器方式(引用方式)。
三种注入方式
- XML:Bean实现类来自第三方类库,例如DataSource等。需要命名空间等配置,例如:context,aop,mvc。
- 注解:在开发的类使用@Controller,@Service等注解
- Java配置类:通过代码控制对象创建逻辑的场景。例如:自定义修改依赖类库。
AOP(Aspect-Oriented Programming)面向切面编程
不通过修改源代码的方式,在主干功能里添加新功能。
AOP底层原理
aop底层使用了动态代理(两种情况)
-
有接口的情况,使用jdk动态代理
创建接口实现类对象,去增强类中的方法
-
没有接口的情况,使用CGLIB动态代理
创建子类的代理对象,去增强类中的方法
aop动态代理实现(jdk)
- 使用jdk动态代理,使用Proxy类里的方法创建代理对象
newProxyInstance其中的三个参数:(1)类加载器;(2)增强方法的所在类,这个类实现的接口,支持多个接口;(3)实现这个接口InvocationHandler,创建代理对象,写增强的方法
- jdk动态代理代码
- 创建接口,定义方法
- 创建接口实现类,实现方法
- 使用proxy类c
基于匿名内部类实现接口;