一、在xml中配置component-scan
<context:component-scan base-package="包路径"/>
从上一章节学习,可以找到标签解析类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()操作,会对加有该注解的类进行代理。

浙公网安备 33010602011771号