SpringBoot-创建自己的Starter


springboot 官方提供了很多 starter 来实现自动配置,简化我们的开发,那么我们能不能把自己常用的一些组件也封装成一个starter来实现自动化配置呢?答案是可以的。

自定义Starter

1. 创建一个空的 maven 项目,并引入依赖

<dependencies>
 	<!-- 自定义starter必须引入的依赖 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-autoconfigure</artifactId>
		<version>2.3.1.RELEASE</version>
	</dependency>
 	<!-- application.properties参数提示依赖 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-configuration-processor</artifactId>
		<version>2.3.1.RELEASE</version>
	</dependency>
</dependencies>

2. 创建配置属性类


@ConfigurationProperties("mystarter")
public class MystarterProperties {
    private String pro1;
    private String pro2;
    private String pro3;
    // 设置默认值
    private Integer pro4 = 1000;

    public String getPro1() {
        return pro1;
    }

    public void setPro1(String pro1) {
        this.pro1 = pro1;
    }

    public String getPro2() {
        return pro2;
    }

    public void setPro2(String pro2) {
        this.pro2 = pro2;
    }

    public String getPro3() {
        return pro3;
    }

    public void setPro3(String pro3) {
        this.pro3 = pro3;
    }

    public Integer getPro4() {
        return pro4;
    }

    public void setPro4(Integer pro4) {
        this.pro4 = pro4;
    }
}

3. 创建服务类

public class MystarterService {
    private String pro1;
    private String pro2;
    private String pro3;
    private Integer pro4;

    @Override
    public String toString() {
        return "MystarterService{" +
                "pro1='" + pro1 + '\'' +
                ", pro2='" + pro2 + '\'' +
                ", pro3='" + pro3 + '\'' +
                ", pro4=" + pro4 +
                '}';
    }

    public MystarterService(String pro1, String pro2, String pro3, Integer pro4) {
        this.pro1 = pro1;
        this.pro2 = pro2;
        this.pro3 = pro3;
        this.pro4 = pro4;
    }

    public String getPro1() {
        return pro1;
    }

    public void setPro1(String pro1) {
        this.pro1 = pro1;
    }

    public String getPro2() {
        return pro2;
    }

    public void setPro2(String pro2) {
        this.pro2 = pro2;
    }

    public String getPro3() {
        return pro3;
    }

    public void setPro3(String pro3) {
        this.pro3 = pro3;
    }

    public Integer getPro4() {
        return pro4;
    }

    public void setPro4(Integer pro4) {
        this.pro4 = pro4;
    }
}

4. 创建自动配置类

@Configuration
@EnableConfigurationProperties({MystarterProperties.class}) // 开启配置
public class MystarterAutoConfiguration {

    @Autowired
    MystarterProperties mystarterProperties;

    @Bean
    @ConditionalOnMissingBean // 当前类不存在,开始注入
    public MystarterService getMystarterService() {
        return new MystarterService(mystarterProperties.getPro1(), mystarterProperties.getPro2(), mystarterProperties.getPro3(), mystarterProperties.getPro4());
    }
}

5. 创建 META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.lizq.mystarter.MystarterAutoConfiguration

6. 创建 META-INF/additional-spring-configuration-metadata.json

SpringBoot 通过 spring-boot-configuration-processor maven 依赖结合 additional-spring-configuration-metadata.json 文件,来控制在 application.properties 中的配置自定义start组件的提示信息。additional-spring-configuration-metadata.json文件内容格式如下:

{
	"properties": [
	{
		"name": "mystarter.pro1",
		"type": "java.lang.String",
		"description": "自定义properties参数描述",
		"defaultValue": "默认值1"
	},
	{
		"name": "mystarter.pro2",
		"type": "java.lang.String",
		"description": "自定义properties参数描述",
		"defaultValue": "默认值2"
	},
	{
		"name": "mystarter.pro3",
		"type": "java.lang.String",
		"description": "自定义properties参数描述",
		"defaultValue": "默认值3"
	},
	{
		"name": "mystarter.pro4",
		"type": "java.lang.Integer",
		"description": "自定义properties参数描述",
		"defaultValue": 3000
	}
	]
}

测试Starter

新建一个 springboot 项目来测试一下我们自定义的starter。在 pom.xml 中引入依赖。

<dependency>
	<groupId>com.lizq</groupId>
	<artifactId>mystarter-spring-boot-starter</artifactId>
	<version>1.0-SNAPSHOT</version>
</dependency>

1.测试 MystarterService 服务类是否自动装配

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

    public static void main(String[] args) {
        ApplicationContext ac = SpringApplication.run(DemoApplication.class, args);
    }

    @Autowired
    private MystarterService service;

    @Override
    public void run(String... args) throws Exception {
        System.out.println(service.toString());
    }
}

打印结果:
在这里插入图片描述
2.测试配置文件是否生效
在 application.yml 中添加配置,如下:

mystarter:
  pro1: pro1
  pro3: pro3
  pro4: 3000

启动,打印结果为:
在这里插入图片描述

至此,我们完成了自定义starter,并且测试成功。关于SpringBoot的核心原理,可以查看 《SpringBoot 核心原理

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
自定义Spring Boot Starter是一种用于简化Spring Boot应用程序配置和依赖管理的机制。它由几个组件组,包括starter包、autoconfiguration包和配置文件。 首先,你需要创建一个Maven工程,并创建三个模块。其中,starter包负责引入依赖,autoconfiguration包负责实现装配。在autoconfiguration包中,你需要定义对应的properties类、configuration类和核心业务类。此外,你还需要在autoconfiguration包的/resources/META-INF/目录下添加spring.factories文件,并配置org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.qiejk.demo.springboot.autoconfiguration.DemoAutoConfiguration。这一步是Spring Boot装配的核心,只有添加了这个内容,Spring Boot才会进行自动装配。\[1\] 在父模块的pom文件中,你需要引入Spring Boot的依赖,例如spring-boot-starter-web,以及指定Spring Boot的版本。这样,你的自定义starter模块就可以基于Spring Boot进行开发和使用。\[2\] 最后,你需要创建一个配置文件,用于告诉Spring Boot在启动时扫描该配置文件,并将其中的配置类加载到Spring容器中。这个配置文件的作用是指定自动配置类的位置。\[3\] 通过以上步骤,你就可以创建自定义的Spring Boot Starter,并在应用程序中使用它来简化配置和依赖管理。 #### 引用[.reference_title] - *1* [如何自定义springboot-starter](https://blog.csdn.net/sinat_29434159/article/details/123995794)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SpringBoot—自定义Starter篇](https://blog.csdn.net/m0_46571920/article/details/122910726)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值