详解如何自定义spring-boot-starter自动化配置

前言

Spring的特性是IOC和AOP,那SpringBoot呢?想必大家都会先想到自动配置,因为自动配置的特性,SpringBoot的配置相比起Spring十分简便,这也是SpringBoot风靡的原因。本文主要介绍自定义starter的流程与相关细节,并附个人自定义的starter给大家参考。

starter配置启动流程

  1. 创建自动配置类(XxxAutoConfiguration)并配置需自动化生成组件的扫描区域,如:

    /**
     * WebCommonAutoConfiguration-参数校验starter
     *
     * @author Wilson
     */
    @Configuration
    @ComponentScan
    @Slf4j
    public class WebValidationAutoConfiguration {
    
        @PostConstruct
        public void init() {
            log.info("Web common validation initialized");
        }
    
    }
    
  2. 在resources目录下新建META-INF/spring.factories,配置@EnabelAutoConfiguration的注解类(多个则换行配置),格式如下:

    # Auto Configure
    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    io.web.validation.WebValidationAutoConfiguration
    
  3. 项目启动时spring-boot-autoconfigure的AutoConfigurationImportSelector会读取解析项目与依赖下的META-INF/spring.factories资源文件获取@EnableAutoConfiguration注解信息并扫描相应package生成所需的bean

Maven依赖配置

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>2.1.6.RELEASE</version>
        <scope>provided</scope>
    </dependency>

注:设置scope为provided方便引入该starter依赖时保持与你项目的spring-boot-autoconfigure的版本一致

锦上添花-application.yml/application配置提示

在java属性配置文件上添加@ConfigurationProperties注解,项目install后的target/class/META-INF下会生成一个spring-configuration-metadata.json文件,该文件其它项目依赖该项目进行application.yml配置文件中的提示来源,当然也可以直接在META-INF下新建spring-configuration-metadata.json自己配置提示信息。图例:
在这里插入图片描述

什么时候考虑定义一个starter

  • 常见的项目基本功能,如参数校验、数据库配置,放到maven-central管理
  • 企业内部常见功能特性,被其它项目广泛依赖,如特有的鉴权方法,放到企业内部maven-central管理

总结

从以上步骤可以看出spring-boot-starter的配置十分简单,简化一下流程即为:

  1. 添加@ConfigurationProperties以便生成application.yml提示
  2. 配置@EnableAutoConfiguration注解类,自动扫描package生成所需bean
  3. 添加spring.factories配置让spring-boot-autoconfigure对当前项目进行AutoCOnfiguration

以上代码全部源自个人开发的starter:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章