SpringBoot中的自定义Starter解读
作者:学哥斌
1、说明
启动器模块其实是一个空的jar文件,里面没有什么类、接口,仅仅是提供辅助性依赖管理,这些依赖可能用于自动装配或者其他类库;

官方的命名方式是:spring-boot-starter-xxx,例如:spring-boot-starter-web。
官方提倡的自定义starter命名方式要和他们区分开,官方的xxx是在最后面,提议第三方自定义的starter的xxx放在最前面
即:xxx-spring-boot-starter,例如:mybatis-spring-boot-starter。
2、自定义starter
2.1 工程构建
IDEA新建普通java空项目:


1、新建一个普通maven模块:


2、新建一个SpringBoot模块:

构建好了后,结构如下:

2.2 starter模块导入autoconfigure模块的依赖

2.3 清理autoconfigure模块
新建的空SpringBoot模块删除其他无关的文件和文件夹,同时pom.xml只留下sarter:

2.4 编辑autoconfigure模块
autoconfigure模块总共要写三个文件:service、properties和antoconfiguration。这三个分别的作用是:提供服务、配置类(定义服务相关的属性配置)和自动配置功能。
2.4.1 编写服务
package cn.klb.boot.autoconfigure;
/**
* @Author: Konglibin
* @Description:
* @Date: Create in 2020/4/24 11:21
* @Modified By:
*/
public class CalculatorService {
CalculatorProperties properties;
public CalculatorProperties getProperties() {
return properties;
}
public void setProperties(CalculatorProperties properties) {
this.properties = properties;
}
public String getAreaOfCircle(Double radius) {
Double area = properties.getPi() * radius * radius;
return Double.toString(area);
}
}2.4.2 编写配置类
package cn.klb.boot.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @Author: Konglibin
* @Description:
* @Date: Create in 2020/4/24 11:21
* @Modified By:
*/
@ConfigurationProperties(prefix = "calculator.constant")
public class CalculatorProperties {
private Double pi;
private Double e;
public Double getPi() {
return pi;
}
public void setPi(Double pi) {
this.pi = pi;
}
public Double getE() {
return e;
}
public void setE(Double e) {
this.e = e;
}
}2.4.3 编写自动配置并注入bean
package cn.klb.boot.autoconfigure;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author: Konglibin
* @Description:
* @Date: Create in 2020/4/24 11:22
* @Modified By:
*/
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(CalculatorProperties.class)
public class CalculatorServiceAutoConfiguration {
@Autowired
CalculatorProperties properties;
@Bean
public CalculatorService getCalculatorService(){
CalculatorService service = new CalculatorService();
service.setProperties(properties);
return service;
}
}2.4.4 编写自己的spring.factories
# Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ cn.klb.boot.autoconfigure.CalculatorServiceAutoConfiguration
2.5 统一打包安装
大部分工作都是在编辑autoconfigure模块,编辑好之后工程如下:

执行maven的install命令(注意先安装autoconfigure再安装starter,否则会找不到包)。
3、测试
新建一个SpringBoot工程,并导入我们自己写的启动器:

编写一个控制器:
package cn.klb.springboot_helloworld.controller;
import cn.klb.boot.autoconfigure.CalculatorService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: Konglibin
* @Description:
* @Date: Create in 2020/4/24 11:44
* @Modified By:
*/
@RestController
public class CalculatorController {
@Autowired
CalculatorService service;
@RequestMapping("/cal")
public String calculateArea(){
return service.getAreaOfCircle(2.0);
}
}application.yaml配置文件配置属性:
calculator:
constant:
pi: 3.14
e: 2.0
启动后浏览器输入自己定义的地址,得到结果如下:

结果成功!
到此这篇关于SpringBoot中的自定义Starter解读的文章就介绍到这了,更多相关自定义Starter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
