spring 5.2 自动扫描、注解和BeanFactoryPostProcessor过程(三)
一、在xml中配置component-scan
从上一章节学习,可以找到标签解析类ComponentScanBeanDefinitionParser,首先取出包路径下的所有class类,
ClassPathBeanDefinitionScanner中findCandidateComponents()筛选出符合条件(包含注解或者实现特定接口类)的所有class类,再将符合条件的Bean加入BeanDefinition中
二、利用ConfigurationClassPostProcessor
在使用BeanFactoryPostProcessor过程中,会实例化ConfigurationClassPostProcessor并调用postProcessBeanDefinitionRegistry()方法,循环遍历BeanFactory中已经存在的BeanDefinition,从中找出包含注解存放到configCandidates集合中。
创建ConfigurationClassParser解析器,调用解析器parse()方法,对BeanDefinition增改,完成不同注解的扫描
第一步解析@Component其中@Configuration继承了@Component,所以也会被解析
然后依次是@PropertySource@PropertySources、@ComponentScan@ComponentScans、@Import、@Bean、实现接口
重要的@Import,在springboot中大量运用,很多注解继承了Import注解,当解析到Import注解时,会将注解类解析成BeanDefinition,判断该类的类型,做不同的处理
其中@Configuration并且配置proxyBeanMethods=true会在postProcessBeanFactory()操作,会对加有该注解的类进行代理。