Spring Boot中 自定义starter逐级抽取过程

当我们在写代码过程中,发现一个包里的代码内容可以在多个方面使用,也许我们会选择cv大法,但是这样的做法不利于后期维护,如果想要修改一个细节的功能,就得把每一个粘贴的地方都做一个修改,于是乎我们可以自定义starter,任何项目导入此starter都会具有里面的功能,如若需要修改参数内容,只需在配置文件中修改即可..

步骤:

  1. 创建自定义starter项目,引入spring-boot-starter基础依赖
  2. 编写模块功能,引入模块所需要的依赖
  3. 编写XxxAutoConfiguration自动配置类,帮其他项目导入这个模块所需要的所有组件
  4. 编写配置文件META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 指定启动需要加载的自动配置
  5. 其他项目直接引入即可使用

1.业务代码

如果想要自定义配置有代码提示,我们导入一下依赖即可

@ConfigurationProperties(prefix = "robot")  //此属性类和配置文件指定前缀绑定
@Component
@Data
public class RobotProperties {

    private String name;
    private String age;
    private String email;
}

<!--        导入配置处理器,配置文件自定义的properties配置都会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

2.基本抽取

  • 创建starter项目,把公共代码所需要的所有依赖导入
  • 把公共代码复制进来
  • 自己写一个配置类,用@Import导入这个场景所需要的组件(xxxController.class,xxxService.class)
  • 解释上面:因为我们写的starter项目所在的包和引入这个starter的项目所在的包不是父子层级,所以不会扫描到我们写的starter项目的组件,所以需要@Import引入
  • 所以只要导了我们写的配置类,就能把这个场景的组件导入进来

3.使用@EnableXxx机制

  1. 自定义一个@EnableXxx

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Import(RobotAutoConfiguration.class)
public @interface EnableRobot {


}

     2.在@EnableXxx上添加@Import(Xxx.class)

这样就能像@EnableWebMvc一样来启用

4.终极抽取[完全自动]-->项目启动,自动加载

  • 依赖SpringBoot的SPI机制
  • META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中编写好我们自动配置类的全类名即可(我们自己在starter项目中创建这些包和编写全类名)
  • 项目启动,自动加载我们的自动配置类

以上仅为个人学习笔记!!

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值