问题:
主程序为什么要与我们的包处于同一级目录:

源码解析:
可以看到我们的@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注解的类所在的包下的所有组件注册进来。
4471

被折叠的 条评论
为什么被折叠?



