AOP
2020-08-18 22:47:20 0 举报
AOP
作者其他创作
大纲/内容
实现
AspectJMethodBeforeAdvice
createProxy
AspectJAroundAdvice
BeanPostProcesorInstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessor
第一步缓存的增强器
ProxyCreatorSupport
通过切点匹配对应的增强器
postProcessAfterInitialization
proxyFactory.getProxy
注册
AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)
第二步 创建代理对象
转换拦截器
getAdvicesAndAdvisorsForBean
AspectJ
下面都是根据advice类型实例化并缓存
AwarBeanClassLoaderAwareBeanFactoryAware
findAdvisorsThatCanApply
找切面
...
找切面带有@Aspect注解的类
是否开启cglib?是否开启动态代理?
所有bean实例化(调用构造函数之前)会被AnnotationAwareAspectJAutoProxyCreator处理
实例化切面
否则cglib代理
invocation.proceed()
判断是否需要代理
getProxy
注册该类的bean定义
责任链模式
AspectJAutoProxyRegistrar
getAdvice
AnnotationAwareAspectJAutoProxyCreator
找出该类的增强器
invoke
exposeProxy=true ThreadLocal中缓存
BeanDefinitionRegistry
通过bean注册类
createAopProxy
获取增强器
InstantiationModelAwarePointcutAdvisorImpl
BeanFactoryAspectInstanceFactory
DefaultAopProxyFactory
@EnableAspectJAutoProxy
instantiateAdvice
JdkDynamicAopProxy实现了JKD INVOKE接口
registerBeanDefinition
findEligibleAdvisors
postProcessBeforeInstantiation
import导入到IOC容器中
ReflectiveMethodInvocation
IOC核心接口
shouldSkip
ProxyFactory
advicegetInterceptorsAndDynamicInterceptionAdvice
创建代理对象
findCandidateAdvisors
找事务切面(advice)
getAopProxyFactory().createAopProxy
AbstractAutoProxyCreator实现了大多数的接口
如果是基于接口则用JDK代理JdkDynamicAopProxy
newProxyInstance
getAdvisors
wrapIfNecessary
AspectJAfterAdvice
假设JDK代理
通过工厂类
0 条评论
回复 删除
下一页