Spring AOP
2020-12-15 21:08:18 0 举报
登录查看完整内容
Spring源码分析之AOP
作者其他创作
大纲/内容
JdkDynamicAopProxy
before()
getAdvicesAndAdvisorsForBean
返回代理对象
④applyBeanPostProcessorsAfterInitialization()
返回AopProxy
getInterceptorsAndDynamicInterceptionAdvice()
AdvisedSupport
proceed()
返回JDK或CGLIB
invoke()
createAopProxy()
initializeBean()
DefaultAdvisorAdapterRegistry
DefaultAopProxyFactory
AspectJAfterRetruningAdvice
ProxyCreatorSupport
AbstractAutoProxyCreator
该方法是生成代理类的核心方法,主要完成以下几个任务:①判断当前Bean是否需要生成代理②获取所有的通知,并进行排序③生成代理类
wrapIfNecessary()
MethodBeforeAdviceInterceptor
findEligibleAdvisors
AbstractAdvisorAutoProxyCreator
遍历获取到的Advisor集合,如果是IntroductionAdvisor则以classFilter进行过滤;如果是PointcutAdvisor,则先判断类是否满足条件,然后通过MethodMatcher判断方法是否满足切点表达式
AspectJAroundAdvice
返回符合条件的Interceptor
返回advisors
postProcessAfterInitialization()
AspectJMethodBeforeAdvice
AspectJAfterAdvice
ReflectiveMethodInvocation
DefaultAdvisorChainFactory
①invokeAwareMethods()
③invokeInitMethods()
代码织入
getProxy()
Spring中的Bean经过资源定位、装载、解析注册到IoC容器,然后进行实例化、依赖注入之后,对Bean进行AOP代理,是通过BeanPostProcessor后置处理器进行,入口为initializeBean()方法,该方法主要完成用户实现的SPI以及init-method,具体如下:①invokeAwareMethods:执行生命周期中的Aware,包括BeanNameAware、BeanFactoryAware、ClassLoaderAware②执行BeanPostProcessor中的Before方法,这也是一个扩展点③invokeInitMethods:执行配置的init-method方法④执行BeanPostProcessor中的after方法进行开启AOP。Spring会在启动阶段,实例化一些默认前置、后置处理器并进行注册
AbstractAutowireCapableBeanFactory
ProxyFactory
findAdvisorsThatCanApply
方法回调
AfterReturningAdviceInterceptor
AspectJAfterThrowingAdvice
getInterceptors()
返回Advisor集合
createAopProxy
findAdvisorBeans
创建代理对象
doCreateBean()
Loop
1、默认创建了3中是配置,并注册缓存;2、对before/after-returning需要进行适配,转化为对应的MethodInterceptor;3、对于after/around/after-throwing,由于接口实现了MethodInterceptor接口,不需要进行转化
②applyBeanPostProcessorsBeforeInitialization()
BeanFactoryAdvisorRetrievalHelper
createProxy()
0 条评论
回复 删除
下一页