史上最详细的aop创建代理对象前的准备工作流程图
2021-09-27 09:11:20 5 举报
最清晰的aop创建代理对象的框图,源码解析级别
作者其他创作
大纲/内容
是
获取符合条件的Advisor
判断能否跳过
如果跳过的话,直接返回空对象
判断是否有自定义的targetSource
匹配
通过表达式在类上和方法上进行匹配,具体的匹配方式看源码
判断当前处理来的对象是否需要被代理
BPP的after方法
否
createProxy
getBean()
判断是否需要被代理
添加ExposeInvocationInterceptor的advisor
添加到符合条件的advisor集合
cglib
遍历当前容器中存在的Advisor的BeanDefinition
shouldSkip
如果不可以跳过
jdk
给BeanPostProcessor一个机会去返回自定义动态代理生成的对象,在当前BPP中,存在一个AutoProxyCreator的对象,因此会执行后续的判断逻辑
直接返回普通对象
doGetBean()
如果不是,直接返回普通对象
是否需要被跳过
当使用spring的aop的时候,需要进行N多个对象的创建,但是在创建过程中需要做很多判断,判断当前对象是否需要被代理,而代理之前,需要的advisor对象必须要提前创建好,才能进行后续的判断如果定义了一个普通的对象,会进入resolveBeforeInstantation()方法的处理吗?
进行代理的创建
resolveBeforeInstantiation()
获取容器中存在的advisor
直接跳转下一个
postProcessorBeforeInstantiation()
createBeanInstance()
创建动态代理需要的Advisor对象
buildAdviosor()标注了@Aspect切面的对象
doCreateBean
createBean()
initializeBean
findCandidateAdvisor()
进行规则的匹配
进行排序操作
经过循环将所有的Advisor对象准备好
从List中按照顺序开始进行对象的创建
匹配不上
populateBean
未完待续。。。。。。
0 条评论
下一页