AOP全流程
2020-05-29 10:41:54 0 举报
AI智能生成
登录查看完整内容
springAOP
作者其他创作
大纲/内容
AOP全流程
@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
没有实现任何接口
finishBeanFactoryInitialization(beanFactory)
preInstantiateSingletons
getBean
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
返回增强后的对象
return beanInstance
业务方法调用calculator.div
CglibAopProxy.DynamicAdvisedInterceptor#intercept
getInterceptorsAndDynamicInterceptionAdvice
MethodCacheKey(method)
this.methodCache.get(cacheKey)
proceed
ExposeInvocationInterceptor#invoke
AspectJAfterThrowingAdvice#invoke
AfterReturningAdviceInterceptor#invoke
AspectJAfterAdvice#invoke
MethodBeforeAdviceInterceptor#invoke
this.advice.before
判断通知列表是否都递归回调完成
invokeJoinpoint
invokeAdviceMethod
this.advice.afterReturning
return retVal
0 条评论
回复 删除
下一页