4.spring源码之注解扫描组件详解

上篇文章我们讲到了自定义标签最终parse()方法需要调用具体的处理器进行解析,今天我们接着上篇文章以ComponentScanBeanDefinitionParser为例进行分析。老规矩,先上流程图

1.BeanDefinitionparserDelegate类的parseCustomElement()自定义标签解析方法

2.进入NamespaceHandlerSupport类parse方法

3.进入ComponentScanBeanDefinitionParser类的parse方法

4.进入configureScanner()方法

 

 

 

可以看到往includeFilter容器中添加了一个Component类型的注解,我们的<context:component-sacn base-package/>标签会扫描@Component、@Service、@Repository、@Controller、@Configuration这些注解,后面4个注解之上都带有@Component注解,可以理解成类似继承关系

5.进入doScan方法

1.进入findCanddidateComponents()方法

 

 

2.对BeanDefinition进行填充

3.还是填充,对@lazy等注解属性值的填充

4.BeanDefinition注册

 

 

在DefaultListableBeanFactory类的registerBeanDefinition()方法中

把beaName,beanDefinition方法beanBefinitionMap容易中,把beanName方法beanDefinitionNames容器中,后面实例化需要用到,从容器中获取BeanDefniniton的beanName

6.进入registerComponents()方法

 

 

spring中注解扫描器组件的源码分析就到这啦

posted @ 2021-07-27 21:55  福福猿  阅读(318)  评论(0)    收藏  举报