springAOP时序图
2021-07-25 09:51:55 0 举报
springAOP时序图
作者其他创作
大纲/内容
throwingInterceptorafterThrow()
以JDK代理为例,JDK动态代理要实现invocationHandler接口,而JdkDynamicAopProxy它实现了InvocationHandler接口,并重写invoke方法,因此代理类的代码织入,应该从JdkDynamicAopProxy类中的invoke入手
ReflectiveMethodInvocation
createAopProxy(AdvisedSupport config)
loop
AOP基本概念切面:具有相同规则的方法/类的集合体通知:回调,要织入的代码写在回调里面切点:代理的目标的具体的方法,如所有的service中的query方法目标对象:被代理的对象AOP代理:JDK CGLib前置通知:在invoke Pointcut之前调用,织入的方法后置通知:把代码织入到pointcut之后返回后通知:返回值非void织入的方法环绕通知:只要有触发调用就会织入代码异常通知:pointcut抛出异常后织入的方法主要流程:寻找入口-》 选择策略 -》 调用方法-》触发通知思路: 1.AOP从哪里开始? DI是从getBean开始的(getBean()->doGetBean()->createBean() -> doCreateBean() ->createBeanInstance():用反射创建对象),创建代理类,应该在实例创建完成后进行,因此AOP应该从createBeanInstance()方法里面去寻找入口2. 动态代理的三个阶段: 创建代理类 ,代码织入(invoke方法里面),回调通知
currentInterceptorIndex
JdkDynamicAopProxy
after()
AbstractAutoProxyCreator
invoke()
AbstractAdvisorAutoProxyCreator
AfterReturningAdviceInterceptor
proxyFactory.getProxy(getProxyClassLoader())
MethodBeforeAdviceInterceptor
创建代理类
AopProxy(JdkDynamicAopProxy或JdkDynamicAopProxy)
DefaultAopProxyFactory
sortAdvisors(List<Advisor> advisors)
代理类的代码织入(即invoke方法中进行增强)
AOP代理类创建完成
AdvisedSupport
sort(java.util.List<?>)
AnnotationAwareOrderComparator
List<Advisor>.toArray()
beforeInterceptorbeofer()
doCreateBean()
afterInterceptorafgter()
List<Advisor> eligibleAdvisors
before()
proceed() 执行责任链中的所有interceptor
ProxyFactory
AbstractAutowireCapableBeanFactory
getProxy(classLoader)
List
getInterceptorsAndDynamicInterceptionAdvice()
回调通知
0 条评论
下一页