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中注解扫描器组件的源码分析就到这啦
浙公网安备 33010602011771号