
前言
? 在使用传统的 Spring 去做 Java EE 应用开发时,在项目中会出现大量的 XMl配置文件,使 Java EE 项目变得笨重且繁琐,从而导致开发和部署上的效率降低。
? Spring Boot 的出现就是简化 Spring 应用的搭建及开发过程。它使用特定的方式来进行配置,从而使开发人员不在需要样板化的配置,也就是说 Spring Boot 并不是什么新的框架。它只是在底层帮我们做好了 Spring 的配置,下面我来详细说明 Spring Boot 是如何自动装配的。
自动配置源码分析
1)Spring Boot 项目中都会使用 @SpringBootApplication 注解来标识当前这个类是主程序。 在主程序的 main() 方法中使用 SpringApplication.run(Class<?> primarySource, String… args) 启动主程序,它的返回值是我们 IOC 的容器。 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T6c12pEZ-1627722088494)(./image02/123455.png)]](https://img-blog.csdnimg.cn/20a35b1f78ea4bb9830fe7cd2c157dba.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNDY1Njg1,size_16,color_FFFFFF,t_70) 2)进入 @SpringBootApplication 注解内部,可以发现此注解其实是复合型注解,它是由这三个重要的注解组成的:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q8EeF2Cg-1627722088500)(./image02/234565464.png)]](https://img-blog.csdnimg.cn/044ff53e0a4744dda58af16f2909169f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyNDY1Njg1,size_16,color_FFFFFF,t_70)
- @ComponentScan 注解:主要是定义扫描的路径从中找出标识了需要装配的类,把它装配到 Spring 的 Bean 容器中。
在web开发中我们经常使用:@Controller、@Service、@Repository 注解,查看源码会发现它们有一个共同的注解 @Component。而 @ComponentScan 注解默认识别这几种注解并加入到 Bean 容器中。
-
@SpringBootConfiguration 注解:内部使用了 @Configuration 注解来标识当前这个类是一个配置类。
- @SpringBootConfiguration 注解是 @Configuration 注解的派生注解,其功能是一致的。
- @SpringBootConfiguration 是 SpringBoot 的注解,而 @Configuration 则是 Spring 原生注解。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZOGSZNEW-1627722088501)(./image02/3456789.png)]](https://img-blog.csdnimg.cn/d90d3570661f497fa52a55419a9ceb0f.png) -
@EnableAutoConfiguration 注解:这就是与自动配置有关的注解,也是复合型注解它是有两个重要的注解组成的:@AutoConfigurationPackage、@Import。 ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SnZ3CxsO-1627722088503)(./image02/4567891546.png)]](https://img-blog.csdnimg.cn/26d29aeaa374422393afd94e106d9313.png)
总结:
- Spring Boot 先加载所有的自动配置类 xxxAutoConfiguration。
- 每个自动配置类根据 @Conditional 条件注解来按需加载。
- 每个自动配置类默认绑定 @EnableConfigurationProperties 注解中的 xxxProperties 类中的属性值。
- 如果在 application.yaml 或 applicaton.properties 配置中定制属性值,那么它会覆盖原有的 xxxProperties 类中的属性值。
- 也可以定制配置,只需要使用 @Bean 注解替换掉底层的组件即可。
|