用户class文件扫描触发方法
spring boot相当于在spring的基础上进行了扩展,与spring扫描配置文件不相同的地方在于
由AbstractApplicationContext中的invokeBeanFactoryPostProcessors(beanFactory)方法过程中添加了
触发扫描class文件的功能
即触发ConfigurationClassPostProcessor的 postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)方法
对class文件进行扫描
用户class文件扫描的包
如果在启动类上定义了basePackages或和basePackageClasses,则会扫描basePackages或和basePackageClasses的父包;
如果都没有定义,则扫描启动类的父包,即如果启动类为com.example.demo.DemoApplication.class,则扫描com.example.demo这个包下的所有class文件
在ComponentScanAnnotationParser类中的parse方法中定义扫描的包
public Set<BeanDefinitionHolder> parse(AnnotationAttributes componentScan, final String declaringClass) {
.............
//定义要扫描的包
Set<String> basePackages = new LinkedHashSet<>();
//先获取配置中定义的扫描包
String[] basePackagesArray = componentScan.getStringArray("basePackages");
for (Stri