Spring源码之 AOP 代理流程

AOP是spring中重要的一个组件,今天看了下AOP代理生成的过程,做了简单的记录,留作日后查看。

spring在完成对bean的装配后,在暴露到工厂前,会对进行实例化。

bean工厂完成对bean的IOC后

在这个过程中可以看到spring对bean生命周期控制的几个用户可以定制的步骤:
BeanPostProcessor.postProcessBeforeInitialization->InitializingBean.afterPropertiesSet->BeanPostProcessor.postProcessAfterInitialization
我们可以通过实现这几个接口来实现对bean不同阶段的一个定制,spring的AOP就通过BeanPostProcessor.postProcessAfterInitialization阶段介入。可以看出spring面向组件编程的思想。

执行bean后置处理器

spring会扫描BeanPostProcessor实现,在此进行处理。我们关注对注解方式实现的Aspect。

应用各个后置处理器

如果当前bean需要被代理,则会生成代理 bean,对我们真正的bean进行包装。

判断是否需要生成代理

这里会从所有的advice中匹配出适合当前bean的advice,如果找到这些advice,就需要该 bean进行封装,即:创建代理。

执行代理的生成

下面看下,spring筛选advice的过程。
找出合适的advisor和advice。但该方法并无实际操作,而是直接调用了其他方法。

找出合适的advisor

首先列出spring中所有advice,然后匹配能够应用的。

匹配过程

此处advice分了两类进行遍历匹配,不知道为什么Advisor会分为两类,客官有知道的请指教(后面也会再看这个问题)。使用注解的aspect不属IntroductionAdvisor。

执行遍历匹配

取出切入点,做最后的判断。

取出切入点准备判断

真正的决策者出现了,看看spring到底是怎么来断定该Advice是否符合当前的bean。
可以看到,spring为了判断该bean是否能够应用该advice,查了当前bean实现的所有接口,但最终判断还是根据当前实例的某个实现方法是否满足匹配规则(比如:实例的某个复写方法上加上了自定义Aspect注解),如果满足,就认为该bean需要加入该advice。即:该类需要做代理类进行封装。

匹配切入点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值