解析aop相關(guān)的標(biāo)簽
DefaultBeanDefinitionDocumentReader.parseBeanDefinitions() ->
BeanDefinitionParserDelegate.parseCustomElement() -> 處理<aop:config>標(biāo)簽户辱,先根據(jù)namespace獲取AopNamespaceHandler
this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri)會調(diào)用AopNamespaceHandler的init()方法,注冊對應(yīng)標(biāo)簽的解析器
NamespaceHandlerSupport.parse() -> findParserForElement()根據(jù)標(biāo)簽獲取解析器,<aop:config>對應(yīng)的是ConfigBeanDefinitionParser
NamespaceHandlerSupport.findParserForElement() -> 根據(jù)名稱config獲取ConfigBeanDefinitionParser
ConfigBeanDefinitionParser.parse() -> 實(shí)際調(diào)用的是ConfigBeanDefinitionParser.parse()
ConfigBeanDefinitionParser.configureAutoProxyCreator -> 向容器中注冊名稱為"org.springframework.aop.config.internalAutoProxyCreator"的bean逸月,class=AspectJAwareAdvisorAutoProxyCreator
ConfigBeanDefinitionParser.parseAspect() ->
ConfigBeanDefinitionParser.parseAdvice() ->
ConfigBeanDefinitionParser.createAdviceDefinition() ->
ConfigBeanDefinitionParser.parsePointcut() ->
初始化aop相關(guān)bean
AbstractAutowireCapableBeanFactory.initializeBean() ->
AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization ->
AbstractAutoProxyCreator.postProcessAfterInitialization() ->
AbstractAutoProxyCreator.wrapIfNecessary() ->
AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean() ->
AbstractAdvisorAutoProxyCreator.findEligibleAdvisors() ->
AbstractAdvisorAutoProxyCreator.findCandidateAdvisors() ->
AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply() ->
AbstractAutoProxyCreator.createProxy() ->