摘要
主要是的分析Springboot的最核心的 3 个注解详解(@SpringBootConfiguration
、@ComponentScan
、@EnableAutoConfiguration
)
- @SpringBootConfiguration:继承自Configuration,支持JavaConfig的方式进行配置。加载相关的bean对象
- @EnableAutoConfiguration:@Import就是加载的INF下面的Spring.Factory的相关的配置类到beandefinitionMap的加载气的配置类。这里里面涉及到SPI技术。
- @ComponentScan:加载相关的类中添加了@CompenScan+、@Repository、@Service、@Compent、@Controller类到beandefinitionMap中
1、@Configuration
这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
下面几个相关注解也是非常重要的!
@Bean
用来代替 XML 配置文件里面的 <bean ...>
配置。
@ImportResource
如果有些通过类的注册方式配置不了的,可以通过这个注解引入额外的 XML 配置文件,有些老的配置文件无法通过 @Configuration
方式配置的非常管用。
@Import
用来引入额外的一个或者多个 @Configuration
修饰的配置文件类。
@SpringBootConfiguration
这个注解就是 @Configuration
注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展,源码如下。
2、@ComponentScan
这是 Spring 3.1 添加的一个注解,用来代替配置文件中的 component-scan
配置,开启组件扫描,即自动扫描包路径下的 @Component
注解进行注册 bean 实例到 context 中。另外,@ComponentScans
是可重复注解,即可以配置多个,用来配置注册不同的子包。
3、@EnableAutoConfiguration
Spring Boot的自动配置注解是@EnableAutoConfiguration, 从上面的@Import的类可以找到下面自动加载自动配置的映射。
这个方法会加载类路径及所有jar包下META-INF/spring.factories配置中映射的自动配置的类。
在默认的情况下,Spring Boot会根据项目中的jar包依赖,自动做出配置,Spring Boot支持的自动配置非常多。如果我们想要关闭一些自动配置的话,我们可以通过手动修改核心注解配置我们不想要自动配置的jar 包。比如(但是一般我们不这么做):
Spring Boot 全局配置文件
Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。在这个配置文件中你可以做一些服务器与Spring 的相关配置以及日志打印等等(在这个配置文件中可以
Xml 配置文件
虽然Spring Boot 已经为我们做了很多的配置,但是如果在相关的项目中你仍然需要xml 文件做一些额外的配置,那么Spring Boot 也是支持的。你可以在入口类通过@ImportResource
进行xml 配置文件的导入并且支持对多个xml 文件的配置。
Spring Boot 全局配置文件路径设置
Spring boot 默认会扫描 application.properties 或者 application.yml 配置文件,自动扫描的路径有以下 4 个:按照优先级排序为:file/config/,file/,classpath/config/,classpath/,高优先级会覆盖低优先级的配置文件。采用的覆盖非失效覆盖,而是通过覆盖实现互补配置。项目发布的时候,还可以通过命令参数 spring.config.location= 设置配置文件的路径。在项目启动时候进行动态的设置。