世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
首先注意一下spring-boot-starter的命名规则,
一般spring-boot内部自带的starter命名格式为:
spring-boot-starter-*
而自定义的spring-boot的starter命名规则为:
*-spring-boot-starter
编写自己starter的过程如下
1.创建一个空的maven项目
<?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>org.example</groupId>
<artifactId>my-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
2.指定Java版本
<properties>
<java.version>1.8</java.version>
</properties>
3.引入spring-boot依赖版本管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
4.引入自定义starter需要的依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
</dependencies>
5.开发AutoConfig类
@Configuration
public class MyAutoConfig {
}
6.在配置文件/resources/META-INF/spring.factories中指定AutoConfig类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hou.config.MyAutoConfig
7.编写配置类实体
@ConfigurationProperties(prefix = "my.com")
public class MyConfigEntity {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
8.在AutoConfig类中引入配置类实体
@Configuration
@EnableConfigurationProperties(MyConfigEntity.class)
public class MyAutoConfig {
}
9.编写Bean实体
public class MyBean {
private String name;
private String age;
public MyBean () {}
public MyBean (String name, String age) {
this.name = name;
this.age = age;
}
public String getName () {
return name;
}
public String getAge () {
return age;
}
}
10.在AutoConfig类中将Bean实体配置为Bean
@Configuration
@EnableConfigurationProperties(MyConfigEntity.class)
public class MyAutoConfig {
@Bean
public MyBean myBean (MyConfigEntity myConfigEntity) {
String name = myConfigEntity.getName();
String age = myConfigEntity.getAge();
return new MyBean(name, age);
}
}
通过以上过程,一个基本的starter就编写完成了,如果将他引入到其他spring-boot项目中就可以使用了
<dependency>
<groupId>org.example</groupId>
<artifactId>my-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
这是使用时spring-boot项目application.yml的配置
my:
com:
name: houbw
age: 18
这是运行示例
@SpringBootTest
class UserStarterApplicationTests {
@Autowired
MyBean myBean;
@Test
void contextLoads() {
String name = myBean.getName();
String age = myBean.getAge();
assert "houbw".equals(name);
assert "18".equals(age);
}
}
结果运行通过
通过以上过程,可以推断出,spring-boot项目在运行SpringApplication.run(UserStarterApplication.class, args);启动时,首先会根据META-INF/spring.factories中EnableAutoConfiguration指定的配置类加载需要的配置信息及初始化自定义的Bean,在启动完成后,我们就可以通过自动注入的形式来获取Bean实例并使用,并且能够获取到事先配置好的数据。
关注公众号