文章目录
一、前言
SpringBoot starter机制
SpringBoot由众多Starter组成,SpringBoot之所以流行,也是因为starter机制。starter是SpringBoot非常重要的一部分,可以理解为一个可拔插式插件,使用starter开发某个功能,开发者不需要关注各种依赖库的处理和具体的配置信息,Spring Boot自动通过classpath路径下的类发现需要的Bean,并置入相应的Bean。例如,你想使用Reids插件,那么可以使用spring-boot-starter-redis;如果想使用MongoDB,可以使用spring-boot-starter-data-mongodb。
为什么要自定义starter
开发过程中,经常会有一些独立于业务之外的配置模块。如果我们将这些可独立于业务代码之外的功能配置模块封装成一个个starter,复用的时候只需要将其在pom中引用依赖即可,SpringBoot为我们完成自动装配。
自定义starter的命名规则
SpringBoot提供的starter以 spring-boot-starter-xxx 的方式命名的。官方建议自定义的starter使用xxx-spring-boot-starter 命名规则。以区分SpringBoot生态提供的starter。
二、使用步骤
整个过程分为两部分:
- 自定义starter
- 使用starter
自定义starter
- 新建maven工程,工程名为xxx-spring-boot-starter,导入依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.5.2.RELEASE</version>
</dependency>
</dependencies>
- 编写javaBean
@EnableConfigurationProperties(SimpleBean.class)
@ConfigurationProperties(prefix = "simplebean")
public class SimpleBean {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "SimpleBean{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
- 编写配置类MyAutoConfiguration
@Configuration
@ConditionalOnClass
public class MyConfiguration {
static {
System.out.println("MyAutoConfiguration init....");
}
@Bean
public SimpleBean simpleBean(){
return new SimpleBean();
}
}
- resources下创建/META-INF/spring.factories,在该文件中配置自己的自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ybhuang.configuration.MyConfiguration
使用自定义starter
- 导入自定义starter的依赖
<dependency>
<groupId>org.ybhuang</groupId>
<artifactId>zdy-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 在全局配置文件中配置属性值
simplebean.id=1
simplebean.name=ybhuang自定义starter
- 编写测试方法
@SpringBootTest
class MyProjectApplicationTests {
@Autowired
SimpleBean simpleBean;
@Test
void contextLoads() {
System.out.println(commonConfiguration.getFilePath());
System.out.println(simpleBean.toString());
}
}
三、读取配置文件中文乱码
在properties文件前面加上
server.servlet.encoding.enabled=true