问题:
主程序为什么要与我们的包处于同一级目录:
源码解析:
可以看到我们的@SpringBootApplication主要是由以下几个注解联合完成的:
其中我们的@SpringBootConfiguration其实就是我们的配置类
@EnableAutoConfiguration其实就是我们的开启自动配置,按住Ctrl进去查看:
发现我们的最主要的注解就是一个@Import()其作用就是引入一个register的组件
点击register查看我们的注册器为我们注册了什么:
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
Registrar() {
}
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
AutoConfigurationPackages.register(registry, (String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0]));
}
public Set<Object> determineImports(AnnotationMetadata metadata) {
return Collections.singleton(new AutoConfigurationPackages.PackageImports(metadata));
}
}
会发现我们的
new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames()
在我们调试的状况下,右击evaluate计算出这个其实就是我们当前的类(主程序)所在的包下。
所以通过这个我们就会将被@SpringBootApplication注解的类所在的包下的所有组件注册进来。