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配置文件,兼容老项目