1. 使用场景
现实开发中,很多情况下需要自己去写一些工具,或者自己去写一些配置,又或者对别人写的框架进行二次的封装,这些东西都是以后非常常用的东西,可能考虑把这些东西打成一个Jar供公司内部的所有人使用。
2. 自定义Starter
2.1 修改目录结构
新建一个SpringBoot项目,将项目的目录改成如下图所示
大致说明一下:
- 删除主类
- 删除application.properties/yml
- resource目录下,新建一个META-INF文件夹,新建spring.factories文件
2.2 引入pom依赖
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
</properties>
<dependencies>
<!--提供spring中的各种注解以及spring初始化的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 起到配置信息提示的作用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.3 编写简单的配置
获取yml中的配置信息
@Component
@ConfigurationProperties(prefix = "customer")
public class CustomerProperties {
/**
* 名称
*/
private String name;
/**
* 名称对应的值
*/
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
写一个自定义的Bean
public class MyCustomerBean {
private String name;
private String value;
public MyCustomerBean(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
编写配置类,往spring中注入Bean
@Configuration
public class MyCustomerBeanConfiguration {
@Bean
public CustomerProperties customerProperties(){
return new CustomerProperties();
}
@Bean
public MyCustomerBean myCustomerBean(CustomerProperties customerProperties){
System.out.println("配置Customer......");
MyCustomerBean myCustomerBean = new MyCustomerBean();
myCustomerBean.setName(customerProperties.getName());
myCustomerBean.setValue(customerProperties.getValue());
System.out.println("customer配置完成");
return myCustomerBean;
}
}
2.4 指定自动配置的类
在spring.factories中添加如下信息
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.han.configuration.MyCustomerBeanConfiguration
2.5 package 然后 install
3. 使用自定义的Starter
引入我们刚刚自定义的starter
<dependency>
<groupId>com.han</groupId>
<artifactId>han-spring-boot-starter</artifactId>
<version>1.0</version>
</dependency>
可以看到yml文件中已经有对应的提示了
当然,我们注册进去的Bean,同样可以使用
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private MyCustomerBean myCustomerBean;
@RequestMapping("/demo")
public String demo(){
System.out.println(myCustomerBean.getName());
System.out.println(myCustomerBean.getValue());
return "success!";
}
}