Spring AOP的实现模式

  • 代理模式: 接口 + 真正实现类 + 代理类
    • 真正实现类和代理类都需要实现接口
    • 实例化时使用代理类进行实例化
    • Spring AOP的作用就是生成一个代理类来替换真正的实现类来对外提供服务
  • Spring中代理的实现模式:
    • Spring AOP中使用 @EnableAspectJAutoProxy注解,将BeanPostProcessor的子类AnnotationAwareAspectJAutoProxyCreator.class注入到容器中,然后在Bean生命周期中的后置处理器里判断切面的情况进行生成代理增强器,并且利用动态代理机制生成代理类
    • 真正实现类的逻辑包含在getBean() 方法中
    • getBean() 方法返回一个Proxy代理类实例
      • Proxy代理类实例时Spring通过JDK动态代理或者CGLIB代理动态生成的
  • 因为Spring AOP中要通过getBean() 方法查找和实例化容器中的Bean, 所以Spring AOP只能作用于Spring容器中的Bean, 无法作用于不是使用Spring IOC容器管理的对象
  • 总结:
    • Spring AOP的核心是代理创建器AbstractAutoProxyCreator的子类,本质上是一个Bean的后置处理器
    • Spring根据配置将相应的代理创建器注册到Spring容器中.如果项目中配置 @EnableAspectJAutoProxy注解 ,Spring就会将AnnotationAwareAspectJAutoProxyCreator注册到Spring容器中
    • 因为代理创建器是一个Bean的后置处理器,所以会在Bean的初始化阶段被调用
    • 代理创建器会判断当前的Bean是否需要被代理,如果不需要代理就直接将原Bean实例返回.如果需要代理就使用动态代理技术根据当前Bean作为目标类创建一个代理类,并且将横切代码注入到代理类中,然后生成一个代理类的实例并返回,使用这个实例作为Bean的实例
    • 如果这个Bean是单例的,那么这个代理对象就会放置到Spring容器的单例池中,这样使用getBean() 时,就可以直接从Spring容器中直接获取这个代理对象
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0.AOP整体流程 1)@EnableAspectJAutoProxy 开启AOP功能2)@EnableAspec...
    王侦阅读 1,919评论 0 1
  • 什么是AOP? AOP(Aspect Oriented Programming):面向切面编程,与面向对象编程OO...
    风动草阅读 388评论 0 1
  • 1、AOP核心概念 1)、横切关注点(对哪些方法进行切入) 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横...
    steven_it阅读 349评论 0 0
  • Spring AOP源码解析 一、源码环境准备 1.1 jar包 新建maven工程,在pom.xml文件中加入下...
    leeliang阅读 328评论 2 2
  • 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式 步骤 导入aop模块:Spring AO...
    mystery_man阅读 249评论 0 2