前言
? 在使用传统的 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 的容器。 2)进入 @SpringBootApplication 注解内部,可以发现此注解其实是复合型注解,它是由这三个重要的注解组成的:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
- @ComponentScan 注解:主要是定义扫描的路径从中找出标识了需要装配的类,把它装配到 Spring 的 Bean 容器中。
在web开发中我们经常使用:@Controller、@Service、@Repository 注解,查看源码会发现它们有一个共同的注解 @Component。而 @ComponentScan 注解默认识别这几种注解并加入到 Bean 容器中。
-
@SpringBootConfiguration 注解:内部使用了 @Configuration 注解来标识当前这个类是一个配置类。
- @SpringBootConfiguration 注解是 @Configuration 注解的派生注解,其功能是一致的。
- @SpringBootConfiguration 是 SpringBoot 的注解,而 @Configuration 则是 Spring 原生注解。
-
@EnableAutoConfiguration 注解:这就是与自动配置有关的注解,也是复合型注解它是有两个重要的注解组成的:@AutoConfigurationPackage、@Import。
总结:
- Spring Boot 先加载所有的自动配置类 xxxAutoConfiguration。
- 每个自动配置类根据 @Conditional 条件注解来按需加载。
- 每个自动配置类默认绑定 @EnableConfigurationProperties 注解中的 xxxProperties 类中的属性值。
- 如果在 application.yaml 或 applicaton.properties 配置中定制属性值,那么它会覆盖原有的 xxxProperties 类中的属性值。
- 也可以定制配置,只需要使用 @Bean 注解替换掉底层的组件即可。
|