上面的图是@SpringBootApplication注解和所包含的注解的目录
1.@Component:这是spring的注解,这个注解的作用:
(把类实例化到spring容器中,相当于配置文件中的<bean id="" class=""/>
2.@Configuration:用于定义配置类,可替换xml
配置文件(这里先简单的理解,有空再去加深一下spring)
3.@SpringBootConfiguration:标注了这个注解表示这是一个springboot的配置类
注意:配置类就是配置文件的替代品,配置类本身需要配置就首先要成为容器中的一个组件。
作用:就是把你的主类作为组件首先添加到容器里面先(配置类写上@Configuration注解等其他注解)
-------------------------------------------------------------------------------------------------------------------------------
1.@Import:导入配置类或者普通Java,把这些类作为组件、或者配置类引入到spring容器中
2.Registerar.class,metadata这个参数获取的是注解的元信息,@SpringBootApplication是标注在启动类上的,就是获取这个类的信息,然后这里我们获取它的所在位置(即包名)
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {
Registrar() {
}
public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
AutoConfigurationPackages.register(registry, new String[]{(new AutoConfigurationPackages.PackageImport(metadata)).getPackageName()});
}
public Set<Object> determineImports(AnnotationMetadata metadata) {
return Collections.singleton(new AutoConfigurationPackages.PackageImport(metadata));
}
}
作用:把标注了@AutoConfigurationPackage标注的类所在的包及其子包下的所有组件扫描到spring容器中
------------------------------------------------------------------------------------------------------------------------------
@Import({AutoConfigurationImportSelector.class})自动配置选择器
Ctrl+点击进入可以看到getAutoConfigurationEntry这个方法,打断点查看
List<String> configurations这个变量里面有大量的自动配置类的名字。
有了这些配置我们就可以省下很多需要麻烦了。
而这些自动配置类的名字是从哪里来的呢?
点击getAutoConfigurationEntry这个方法调用的
getCandidateConfigurations方法里面找到调用的
loadFactoryNames(),这个方法的参数里面有1.自动配置类 2.类加载器
继续进入方法里面,再点击loadSpringFactories可以看到
在这个包里面打开找到对应的文件,打开自己看看你就明白那些自动配置类是从哪里来的了。
作用:导入大量的自动配置类到容器里面。
--------------------------------------------------------------------------------------------------------------------------------------------------------
最后总结:
一:其实就是@SpringBootApplication这个注解把主类作为组件放到容器中先
二:可是实主类是什么也没有的,那么@SpringBootApplication在为这个主类添加自动配置的注解,注解里面把主类所在包下的所有组件扫描然后也放入容器中。
三:这样也不行啊,要自己写太多的组件很麻烦的,那么就通过一个配置文件,把所有的其他组件的名字都列出来,然后通过这个名单把那些jar包组件全部都自动配进来。