Spring-aop 的实现原理

官网文档地址:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-advice

查看5.4节。Spring 参考aspectJ 的设计方式来实现,借助aspectj注解来处理。

关键点:几个注解。

@EnableAspectJAutoProxy  这个注解需要加在配置类上。其中干了一件事,将AnnotationAwareAspectJAutoProxyCreator 注入IOC容器,本质是个BeanPostProcessor (这个类可以在bean 注入IOC 容器中前可以调整bean 的属性等),通过调试代码可以发现,其实是在postProcessAfterInitialization方法中进行proxy 类的生成。

方法调用路线:1、wrapIfNecessary 这个是对所有bean都要进行判断是否需要进行包装处理的

                           2、getAdvicesAndAdvisorsForBean 方法来处理判断当前bean 是否需要进行aop 代理类的生成,其中通过findEligibleAdvisors  方法来判断该类的方法是否需要被通知。

                            3、通过 createAopProxy 方法来获取 一个进行动态代理的AopProxy 实现。可以看到如果该类是个接口实现类或者已经是个代理类 那么 本次proxy 就选择JdkDynamicAopProxy 否则 就选择ObjenesisCglibAopProxy。

                            4、通过动态代理将对应方法进行包装,返回warp后的bean实例,注入IOC。可以看到原来new bean 则在该过程被放弃。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种...
    Java高级新技术阅读 120评论 0 0
  • AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种...
    fad2aa506f5e阅读 344评论 0 0
  • Spring致力于提供一种方法管理你的业务对象。在大量Java EE的应用中,随处可见Spring。今天我将简单的...
    JAVA架构师的圈子阅读 1,400评论 0 16
  • 概述 Spring是什么? Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但是现在已经不止于企...
    琅筑阅读 1,236评论 2 8
  • 今天一天的事情有点多,感觉到自己有些着急,再看到一个男孩磨磨唧唧的,内心又升起怨恨。 知道自己是动了秉性,被他人扰...
    正娟_d019阅读 128评论 0 0