赞
踩
Springboot Starter机制抛弃了过去创建一个Spring项目需要依赖大量繁琐的jar包和配置信息,同时也规避了版本冲突的问题,做Java开发的经历中一定碰到过引入各种依赖出现版本冲突的噩梦,Starter的出现就是为了规避这样的问题,做到同一个依赖的版本统一。本文主要说明Starter的原理和如何自定义一个Starter启动器。
springboot starter利用自动装载的原理,将starter中的配置项自动加载到IoC容器中,降低配置的复杂性。自定义一个starter的主要步骤为:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>
其中spring-boot-autoconfigure是必须要引入的。
@ConfigurationProperties(prefix = "com.test")
public class MyStarterProperties {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
MyStarterProperties这个文件的属性和配置文件中的配置项是对应的,@ConfigurationProperties(prefix = “com.test”)表示该配置项的key以com.test为前缀。
@EnableConfigurationProperties({
MyStarterProperties.class,
})
@Configuration
public class MyStarterAutoConfiguration {
@Bean
MyStarterTemplate getMyStarterTemplate(MyStarterProperties myStarterProperties) {
return new MyStarterTemplate(myStarterProperties);
}
}
MyStarterAutoConfiguration是自动配置类,他会自动加载MyStarterProperties属性配置类,并且会返回MyStarterTemplate这个业务相关的配置类,这个类是和业务相关的,需要我们自己实现。
public class MyStarterTemplate {
MyStarterProperties myStarterProperties;
public MyStarterTemplate(MyStarterProperties myStarterProperties) {
this.myStarterProperties = myStarterProperties;
}
public void printName() {
System.out.println("myStarterProperties.getName() = " + myStarterProperties.getName());
}
}
MyStarterTemplate这个配置类也会被自动加载。
在resources/META-INF创建一个spring.factories文件和spring-configuration-metadata.json文件。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.yangnk.threadpoolstarter.myStarter.MyStarterAutoConfiguration
{ "group": [ { "name": "com.yangnk", "type": "com.yangnk.threadpoolstarter.config.MyStarterProperties", "sourceType": "com.yangnk.threadpoolstarter.config.MyStarterProperties" } ], "properties": [ { "name": "com.yangnk.name", "type": "java.lang.String", "description": "my start name", "sourceType": "com.yangnk.threadpoolstarter.myStarter.MyStarterProperties", "defaultValue": "MyStarterProperties name" } ] }
如果不想要手动实现pring-configuration-metadata.json,引入的spring-boot-configuration-processor依赖会帮我们自动生成。
通过maven的install命令就可以将该依赖打包到本地仓库。在测试的项目中引入该依赖即可,在Properties配置文件中加上配置项。
myStarterDemo完整代码:https://github.com/yangnk/SpringBoot_Learning/tree/master/MyStarterDemo
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。