自定义Spring Boot Starter

1. 创建starter项目

依赖:基本依赖:spring-boot-starter,lombok,spring-boot-configuration-processor(配合spring-configuration-metadata.json在配置文件中生成提示信息)

2. 定义Starter需要的配置(Properties)类

@ConfigurationProperties(prefix = "spring.user")
@Data
public class UserProperties {
    private String name;
    private String sex;
    private Integer age;

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

3. 编写自动配置类

@Configuration
//引入自定义的属性,不用这个也可以在UserProperties上面加上注解@Configuration,作用是一样的
//两个存在一个就行,就是让自定义的属性被spring管理
@EnableConfigurationProperties(UserProperties.class)
public class UserAutoConfigure {
    @Bean
    //更加细致的定义注入bean的条件,需要配置文件中包含spring.use.enabled=true,才会配置UserClient
    @ConditionalOnProperty(prefix = "spring.user",value = "enabled",havingValue = "true")
    public UserClient userClient(UserProperties userProperties) {
        return new UserClient(userProperties);
    }
}
public class UserClient {
    @Getter
    private UserProperties userProperties;

    public UserClient(UserProperties userProperties) {
        this.userProperties = userProperties;
    }

    @Override
    public String toString() {
        return "自动注入的userClient   UserClient{" +
                "userProperties=" + userProperties +
                '}';
    }
}

4. 编写spring.factories文件加载自动配置类

  1. 文件路径 resources/META_INF里面新建spring.factories文件,添加配置,这种配置方法默认就是加载启动,如果想要灵活的配置是否加载启动类,参考方法二

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yu.starter_demo.UserAutoConfigure

  1. 自定义注解灵活加载启动类 ,在启动类上加上自己定义的注解@EnableUserClient就可以灵活配置加载启动类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(UserAutoConfigure.class)
public @interface EnableUserClient {
}

4. 编写配置提示文件spring-configuration-metadata.json(非必须)

文件写法可参考spring-boot-autoconfigure下的spring-configuration-metadata.json文件

{
  "properties": [
    {
      "name": "spring.user.name",
      "type": "java.lang.String",
      "description": "用户名",
      "sourceType": "com.yu.starter_demo.UserProperties",
      "defaultValue": "LingLing"
    },
    {
      "name": "spring.user.sex",
      "type": "java.lang.String",
      "description": "性别",
      "defaultValue": "男"
    },
    {
      "name": "spring.user.age",
      "type": "java.lang.Integer",
      "description": "年龄",
      "defaultValue": 18
    },
    {
      "name": "spring.user.enabled",
      "type": "java.lang.Boolean",
      "description": "是否自动装配userClient",
      "defaultValue": false
    }
  ]
}

添加这个文件的目的是为了让yml/properties的编写出现智能提示

注意事项:spring-configuration-metadata.json文件只当提示用,并不会真的生效。即比如我把spring.usr.sex的类型改成了boolean,在yml中会提示编译错误,但是不会影响项目的启动,同理在json文件编写的defaultValue属性值也只是作为一个显示参考,并不会真的生效。(另:json文件修改在yml中看到的效果会延迟比较多,所以不必特别注意这个,这个文件可写可不写)

5. 使用项目中引入依赖,增加配置即可使用

server:
  port: 8070
spring:
  user:
    enabled: true
    name: Xiaoyu
    sex:age: 10
@RestController
public class TestController {
    @Resource
    private UserClient userClient;

    @GetMapping("/getUserClient")
    public String getUserClient() {
        return userClient.toString();
    }
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值