Spring AOP源码分析主要代码流程

2018-10-06  本文已影响22人  末等公民

解析aop相关的标签

DefaultBeanDefinitionDocumentReader.parseBeanDefinitions() ->  

    BeanDefinitionParserDelegate.parseCustomElement() -> 处理<aop:config>标签,先根据namespace获取AopNamespaceHandler
    this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri)会调用AopNamespaceHandler的init()方法,注册对应标签的解析器  

        NamespaceHandlerSupport.parse() -> findParserForElement()根据标签获取解析器,<aop:config>对应的是ConfigBeanDefinitionParser  
    
            NamespaceHandlerSupport.findParserForElement() -> 根据名称config获取ConfigBeanDefinitionParser  
            ConfigBeanDefinitionParser.parse() -> 实际调用的是ConfigBeanDefinitionParser.parse()  
                
                ConfigBeanDefinitionParser.configureAutoProxyCreator -> 向容器中注册名称为"org.springframework.aop.config.internalAutoProxyCreator"的bean,class=AspectJAwareAdvisorAutoProxyCreator
        
                ConfigBeanDefinitionParser.parseAspect() ->  
            
                    ConfigBeanDefinitionParser.parseAdvice() ->  
                
                        ConfigBeanDefinitionParser.createAdviceDefinition() ->  
                        
                    ConfigBeanDefinitionParser.parsePointcut() ->

初始化aop相关bean

AbstractAutowireCapableBeanFactory.initializeBean() ->  

    AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization ->  
    
        AbstractAutoProxyCreator.postProcessAfterInitialization() ->  
        
            AbstractAutoProxyCreator.wrapIfNecessary() ->  
        
                AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean() ->  
                
                    AbstractAdvisorAutoProxyCreator.findEligibleAdvisors() ->  
                    
                        AbstractAdvisorAutoProxyCreator.findCandidateAdvisors() ->
                        AbstractAdvisorAutoProxyCreator.findAdvisorsThatCanApply() ->
                        
                AbstractAutoProxyCreator.createProxy() ->        
上一篇下一篇

猜你喜欢

热点阅读