解析@ComponentScan

首先@ComponentScan作用是扫描包路径的,把对应的配置的包路径下的所有的有注解的类扫描到以后变成BeanDefinition对象后,把这些BeanDefinition对象们加入到Spring容器里面,这个@ComponentScan注解的功能实现过程是在ConfigurationClassPostProcessor.class里面实现的



ConfigurationClassPostProcessor#processConfigBeanDefinitions调用
ConfigurationClassParser#parse(java.util.Set),然后根据不同的接口类型调用不同的parse方法,在方法内部调用
ConfigurationClassParser#processConfigurationClass, 调用
ConfigurationClassParser#doProcessConfigurationClass,在这个方法里面处理@Import和@ImportResource和@ComponentScans 和@ComponentScan
调用
ComponentScanAnnotationParser#parse 解析@ComponentScan,可以获取@ComponentScan注解上的一些配置信息等等,最后调用
ClassPathBeanDefinitionScanner#doScan通过basePackages配置的扫描路径,开始扫描把符合条件的BeanDefinition封装到beanDefinitions容器里面