Spring中IOC和AOP的原理

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

基于匿名内部类实现接口;

猜你喜欢

转载自blog.csdn.net/qq_39756007/article/details/129012455