美文网首页
Spring-aop 的实现原理

Spring-aop 的实现原理

作者: Ambition_geeke | 来源:发表于2020-02-12 23:18 被阅读0次

    官网文档地址: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 则在该过程被放弃。

    相关文章

      网友评论

          本文标题:Spring-aop 的实现原理

          本文链接:https://www.haomeiwen.com/subject/myshfhtx.html