编写自己的starter
步骤
- 创建名字为
xxx-spring-boot-starter
的启动器项目 - 创建名字为
xxx-spring-boot-autoconfigure
的项目
- 编写属性绑定类
xxxProperties
- 编写服务类,引入
xxxProperties
- 编写自动配置类
XXXAutoConfiguration
注入配置 - 创建
spring.factories
文件,用于指定要自动配置的类
- 启动器项目为空项目,用来引入
xxx-spring-boot-autoconfigure
等其他依赖 - 项目引入
starter
,配置需要配置的信息
创建启动器项目
由于启动器不需要代码实现,只需要依赖其他项目,所以直接创建一个空的 maven 项目。但是名字要规范。
这里创建的 starter
是 myapp-spring-boot-starter
myapp-spring-boot-starter
pom 文件非常简单,只需要引入接下来要创建的 myapp-spring-boot-autoconfigure
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.codingme.starter</groupId>
<artifactId>myapp-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 启动器 -->
<dependencies>
<!-- 引入自动配置项目 -->
<dependency>
<groupId>net.codingme.starter</groupId>
<artifactId>myapp-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
创建自动配置项目
结合上面对 starter
的分析,直接创建一个名字为 myapp-spring-boot-autoconfigure
的项目。项目中只引入 springboot
父项目以及 spring-boot-starter
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>net.codingme.starter</groupId>
<artifactId>myapp-spring-boot-autoconfigure</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>myapp-spring-boot-autoconfigure</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
项目的总体结构看图
myapp-spring-boot-starter-autoconfigure
在 HelloProperties
中通过注解 @ConfigurationProperties(prefix = "myapp.hello")
让类中的属性与 myapp.hello
开头的配置进行绑定
/**
* <p>
*
* @Author niujinpeng
* @Date 2019/10/29 23:51
*/
@ConfigurationProperties(prefix = "myapp.hello")
public class HelloProperties {
private String suffix;
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}
然后在 HelloService
中的 sayHello
方法使用 HelloProperties
中自动绑定的值
public class HelloService {
HelloProperties helloProperties;
public String sayHello(String name) {
return "Hello " + name + "," + helloProperties.getSuffix();
}
public HelloProperties getHelloProperties() {
return helloProperties;
}
public void setHelloProperties(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
}
为了让 HelloService
可以自动注入且能正常使用 HelloProperties
,所以我们在
HelloServiceAutoConfiguration
类中把 HelloProperties.class
引入,然后把 HelloService
注入到 Bean
/**
* web应用才生效
*/
@ConditionalOnWebApplication
/**
* 让属性文件生效
*/
@EnableConfigurationProperties(HelloProperties.class)
/***
* 声明是一个配置类
*/
@Configuration
public class HelloServiceAutoConfiguration {
@Autowired
private HelloProperties helloProperties;
@Bean
public HelloService helloService() {
HelloService helloService = new HelloService();
helloService.setHelloProperties(helloProperties);
return helloService;
}
}
最后在 spring.factories
中只需要指定要自动配置的类即可
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
net.codingme.starter.HelloServiceAutoConfiguration
到这里,自动配置项目就完成了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73765.html