SpringBoot-(三十二)自定义spring-boot-starter

本文最后更新于:February 27, 2023 pm

SpringBoot框架中有两个非常重要的策略:开箱即用和约定优于配置。其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

目录

对于SpringBoot的自动装配机制,这里就不描述了,可自行搜索。总的来说,写一个自定义的starter还是比较简单的,只需要简单的几步。

步骤

  • 创建一个SpringBoot项目。可以删除启动类。
  • 项目构建完成后,在resources文件夹下面新建META-INF文件夹,并新建spring.factories文件。
  • 增加服务提供类。
  • 增加统一配置类。
  • 添加配置类到文件。

示例

前两步就不演示了,直接从第三步开始。

服务提供类

即提供的服务是什么。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.moreoj.utilsdemo;

import org.springframework.beans.factory.annotation.Value;

/**
* @Author DragonOne
* @Date 2023/2/27 16:36
* @墨水记忆 www.tothefor.com
*/

public class Utils {

@Value("${spring.application.name}")
private String name;

public void print() {
System.out.println("我的starter中的方法。。。" + name);
}
}

统一配置类

所有需要的服务都进行注入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.moreoj.utilsdemo;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* @Author DragonOne
* @Date 2023/2/27 16:38
* @墨水记忆 www.tothefor.com
*/

@Configuration
public class UtilsConfig {

@Bean
public Utils getUtils(){
return new Utils();
}
}

自动装配

将上面的UtilsConfig类进行配置。在spring.factories文件里添加:

1
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.moreoj.utilsdemo.UtilsConfig

打包

可自行上传至Maven仓库。这里就只是演示一下本地的。

执行:install后,就会在你的本地maven仓库出现一个jar包,之后其他的项目就可以从这个本地maven仓库里获取依赖。

📢注意:删除启动类后会报错如下

1
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.6.11:repackage (repackage) on project utils-demo: Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.6.11:repackage failed: Unable to find main class

将打包插件删除即可。

1
2
3
4
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

使用

然后在其他模块中进行引入:

1
2
3
4
5
<dependency>
<groupId>com.moreoj</groupId>
<artifactId>utils-demo</artifactId>
<version>1.0.0</version>
</dependency>

然后就可以正常的进行使用了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.example.userdemo;

import com.moreoj.utilsdemo.Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author DragonOne
* @Date 2023/2/27 16:44
* @墨水记忆 www.tothefor.com
*/

@RestController
public class tetsc {

@Autowired
private Utils utils;

@RequestMapping("/get")
public Object test(){
utils.print();
return "ok";
}
}

提示

  • 一般官方的starter命名为:spring-boot-starter-xxxx;
  • 自定义的命名一般为:xxxx-spring-boot-starter;