AOP全流程
2020-05-29 10:41:54 0 举报
AI智能生成
springAOP
作者其他创作
大纲/内容
@EnableAspectJAutoProxy
AspectJAutoProxyRegistrar
ImportBeanDefinitionRegistrar
registerBeanDefinitions
registerOrEscalateApcAsRequired
AnnotationAwareAspectJAutoProxyCreator继承关系
继承AspectJAwareAdvisorAutoProxyCreator
继承AbstractAdvisorAutoProxyCreator
继承AbstractAutoProxyCreator
继承ProxyProcessorSupport
继承ProxyConfig
实现Ordered
实现BeanClassLoaderAware
实现AopInfrastructureBean
实现SmartInstantiationAwareBeanPostProcessor
继承InstantiationAwareBeanPostProcessor
继承BeanPostProcessor
实现BeanFactoryAware
AnnotationAwareAspectJAutoProxyCreator
registerBeanDefinition
AnnotationConfigApplicationContext
refresh()
registerBeanPostProcessors(beanFactory)
registerBeanPostProcessors
实现了PriorityOrdered接口
实现了Ordered接口
beanFactory.getBean
doGetBean
transformedBeanName
getSingleton
markBeanAsCreated
mbd.getDependsOn()
registerDependentBean
getBean(dep)
mbd.isSingleton()
getSingleton(beanName)
createBean
resolveBeforeInstantiation
applyBeanPostProcessorsBeforeInstantiation
postProcessBeforeInstantiation
doCreateBean
createBeanInstance
bean创建的几种类型
populateBean
initializeBean
invokeAwareMethods
applyBeanPostProcessorsBeforeInitialization
invokeInitMethods
applyBeanPostProcessorsAfterInitialization
registerDisposableBeanIfNecessary
addSingleton
getObjectForBeanInstance
mbd.isPrototype()
其它Scope
registerBeanPostProcessors
没有实现任何接口
finishBeanFactoryInitialization(beanFactory)
preInstantiateSingletons
getBean
createBean
resolveBeforeInstantiation
applyBeanPostProcessorsBeforeInstantiation
doCreateBean
createBeanInstance
populateBean
initializeBean
invokeAwareMethods
applyBeanPostProcessorsBeforeInitialization
invokeInitMethods
applyBeanPostProcessorsAfterInitialization
postProcessAfterInitialization
wrapIfNecessary
getAdvicesAndAdvisorsForBean
findEligibleAdvisors
findCandidateAdvisors
super.findCandidateAdvisors
advisors.addAll
buildAspectJAdvisors
this.aspectBeanNames
this.advisorsCache.get(aspectName)
findAdvisorsThatCanApply
extendAdvisors
sortAdvisors
createProxy
buildAdvisors
proxyFactory.addAdvisors(advisors)
proxyFactory.setTargetSource(targetSource)
proxyFactory.getProxy
createAopProxy
JdkDynamicAopProxy
ObjenesisCglibAopProxy
this.advisedBeans.put(cacheKey, Boolean.FALSE)
返回增强后的对象
registerDisposableBeanIfNecessary
return beanInstance
业务方法调用calculator.div
CglibAopProxy.DynamicAdvisedInterceptor#intercept
getInterceptorsAndDynamicInterceptionAdvice
MethodCacheKey(method)
this.methodCache.get(cacheKey)
getInterceptorsAndDynamicInterceptionAdvice
this.methodCache.put(cacheKey, cached)
proceed
ExposeInvocationInterceptor#invoke
proceed
AspectJAfterThrowingAdvice#invoke
proceed
AfterReturningAdviceInterceptor#invoke
proceed
AspectJAfterAdvice#invoke
proceed
MethodBeforeAdviceInterceptor#invoke
this.advice.before
proceed
判断通知列表是否都递归回调完成
invokeJoinpoint
AspectJAfterAdvice#invoke
invokeAdviceMethod
AfterReturningAdviceInterceptor#invoke
this.advice.afterReturning
AspectJAfterThrowingAdvice#invoke
invokeAdviceMethod
ExposeInvocationInterceptor#invoke
return retVal
0 条评论
下一页