starter简介-自动化配置
Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的 starter(启动器),starter 中整合了该场景下各种可能用到的依赖,用户只需要在 Maven 中引入 starter 依赖,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置。starter 提供了大量的自动配置,让用户摆脱了处理各种依赖和配置的困扰。所有这些 starter 都遵循着约定成俗的默认配置,并允许用户调整这些配置,即遵循“约定大于配置”的原则。
SpringBoot官方提供了很多Starter,例如:mybatis-spring-boot-starter,spring-data-redis-starter,也可以定义自己的starter。
starter自动化配置原理
- 编写自己的starter项目
- starter中引入 spring-boot-configuration-processor用于编译生成spring-configuration-metadata.json ,在IDE中编辑配置文件时,会出现提示
- 打包选择jar-no-fork,不需要main函数
- 通过pom引入starter依赖
Maven引入jar包,SpringBoot启动的时候找到starter下的spring.factories,根据这个文件找到需要自动配置的类。
自动配置类例子
// 配置类
@Configuration
@ConditionalOnBean(annotation = EnableDemoConfiguration.class)
@EnableConfigurationProperties(DemoProperties.class)
public class DemoAutoConfiguration {
@Bean
@ConditionalOnMissingBean
DemoService demoService (){
return new DemoService();
}
}
// 自动配置的入口 建议有一个EnableXXX的注解
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface EnableDemoConfiguration {
}
// 配置属性
@Data
@ConfigurationProperties(prefix = "demo")
public class DemoProperties {
private String name;
private Integer age;
}
// resources/META-INF/spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ouyanglol.starterdemo.config.DemoAutoConfiguration
配置类注解
注解 | 说明 |
@Configuration | bean配置类 |
@EnableAutoConfiguration | 开启SpringBoot自动配置功能 |
@AutoConfigurationPackage | 自动配置包,扫描启动类同级和子级的所有组件 |
@Import | 手动导入组件 |
@ComponentScan | 扫描包路径下的所有@Component及其子类注解的组件 |
@Conditional | 满足指定条件后开启当前配置类 |
@ConditionalOnBean | 容器中有指定的Bean才开启配置 |
@ConditionalOnClass | 容器中有指定的Class才开启配置 |
@ConditionalOnMissingClass | 容器中没有有指定的Class才开启配置 |
@ConditionalOnWebApplication | 是SERVLET类型项目才开启配置 |
@ConditionalOnNotWebApplication | 不是SERVLET类型项目开启配置 |
@ConditionalOnProperty | 指定的属性有指定的值时开启配置 |
@ConditionalOnResource | 类路径下有指定的资源就开启配置 |
@ConditionalOnSingleCandidate | 指定的Class在容器中只有一个bean,或者为首选才开启 |
@ConfigurationProperties | 配置文件类,加载额外的配置(.properties) |
@EnableConfigurationProperties | 传入配置文件类,配合@ConfigurationProperties使用 |
@AutoConfigureAfter | 该自动配置类需要在另外指定的自动配置类配置完之后才开启配置 |
@AutoConfigureBefore | 与AutoConfigureAfter相反,是之前开启 |
@ImportResource | 手动导入Spring配置文件,兼容老项目 |