Spring Framework AOP
2020-04-01 11:05:44 1 举报
Spring AOP 原理
作者其他创作
大纲/内容
执行 registerBeanDefinitions() 方法
span style=\
JdkDynamicAopProxy如果是接口类型或者 Proxy 类型,就使用span style=\
invocation.proceed()
① isInfrastructureClass()判断是否是 AOP 基类和是否被 @Aspect 注解标识
2
① getInterceptorsAndDynamicInterceptionAdvice()
CglibAopProxy.getProxy()如果是接口类型或者 Proxy 类型,就使用span style=\
(MethodInterceptor)invoke(this)触发拦截器链的调用
@Import(AspectJAutoProxyRegistrar.class)给容器中导入组件 AspectJAutoProxyRegistrar
② shouldSkip()判断是否需要跳过
④ AspectJAfterThrowingAdvice.invoke()调用 proceed() 方法,在异常里执行异常通知
findAdvisorsThatCanApply()找到能在当前 bean 适用的增强器
③ ExposeInvocationInterceptor.invoke()将 invocation 保存在 ThreadLocal 中,然后执行 proceed() 方法
5
⑤ createAopProxy()创建代理工厂
决定使用哪种代理方式
④ findEligibleAdvisors()查找能在当前 bean 适用的增强器
相同
sortAdvisors()给增强器进行排序
1
ObjenesisCglibAopProxyCglib 动态代理
AnnotationAwareAspectJAutoProxyCreator
根据代理工厂创建代理对象
@EnableAspectJAutoProxy
JdkDynamicAopProxy
postProcessBeforespan style=\
4
invokeJoinpoint()当拦截器处于最后一个时候,反射调用真实方法
findCandidateAdvisors()找到候选的所有增强器
⑥ AspectJAfterAdvice.invoke()先执行 proceed() 方法,在 finally 执行返回通知
③ wrapIfNecessary()对类进行包装
给容器中注入一个 beanbeanName 是:org.springframework.aop.config.span style=\
⑦ MethodBeforeAdviceInterceptor.invoke()先调用前置通知,再调用 proceed() 方法
postProcessAfterspan style=\
3
⑤ AfterReturningAdviceInterceptor.invoke()等 proceed() 方法执行完毕后,拿到结果再执行返回通知
② invocation.proceed()触发拦截器链的调用
getAdvicesAndAdvisorsForBean()获取当前 bean 的所有增强器(通知方法)
getProxy()创建代理对象
createProxy()创建 bean 的代理对象
0 条评论
下一页