1-2-3.微服务与Spring Boot源码解析(观感)
2020年2月27日
14:45
来自颜群老师的Spring课程
@SpringBootApplication
@SpringBootApplication是spring boot的主配置类,之所以spring boot有 这么强大的功能,归功于它
该注解包含:
@SpringBootConfiguration
@SpringBootConfiguration其中又包含 @Configuration,代表了配置类;
该类是一个配置类;
加了@Configuration 注解的类,会自动纳入Spring 容器
@EnableAutoConfiguration (可以自动配置)
使spring boot 可以自动配置。 -> 原则:约定优于配置
源码分析
@EnableAutoConfiguration ->
@AutoConfigurationPackage ->
@Import(AutoConfigurationPackages.Registrar.class) ->
这里的 metadata(元数据)指的是:主配置类 的包名 + 类名, getPackageName() 是获取包的名字
例如:org.yq.HelloWorld.HelloWorldApplication = 包名(org.yq.HelloWorld) + 类名(HelloWorldApplication)
结论
@EnableAutoConfiguration 可以使spring boot自动配置。可以找到主配置类 @SpringBootApplication 所在类的包,就会将该包 及所有的子包全部纳入 spring 容器
主配置类
主配置类 所在包的子包:
源码分析
@EnableAutoConfiguration -> @Import(AutoConfigurationImportSelector.class)
这个 AutoConfigurationImportSelector 的作用是:将第三方的依赖(jar、配置) 引入到 spring 容器中
通过该方法将 第三方的依赖 引入到 spring 容器中
- @EnableAutoConfiguration ->
- @Import(AutoConfigurationImportSelector.class) ->
- getCandidateConfigurations() ->
- loadFactoryNames() ->
- loadSpringFactories() ->
- FACTORIES_RESOURCE_LOCATION=“META-INF/spring.factories”
FACTORIES_RESOURCE_LOCATION=“META-INF/spring.factories” :spring boot 在启动时,会根据 META_INF/spring.factories 找到相应的三方以来,并将这些依赖引入本项目
总结
- 编写项目时,一般会将自己写的代码 以及三方依赖进行配置。但是spring boot 会自动配置
- 自己的代码: spring boot 通过 @SpringBootConfiguration 自动帮我们配置
- 三方依赖: 通过 spring-boot-autoconfigure-2.x.x.RELEASE.jar 中的 META-INF/spring.factories 进行声明,最后通过 @EnableAutoConfiguration 开启使用
- spring-boot-autoconfigure-2.x.x.RELEASE.jar包中 包含了 J2EE 整合体系中需要的依赖。