自定义SpringBoot Starter
首先用SpringBoot初始化向导准备两个工程,分别是XXXAutoConfiguration和spring-boot-XXXConfiguration-starter
starter的作用仅仅是引入AutoConfiguration,不做过多配置,AutoConfiguration的作用才是自动配置核心原理
XXXAutoConfiguration工程
首先就是要装配的类,我这里用
SiriusConfigure
,这里不需要加@Configuration注解,因为需要后面需要按照条件进行装配。
public class SiriusConfigure {
SiriusProperties siriusProperties;
public SiriusConfigure(SiriusProperties siriusProperties) {
this.siriusProperties = siriusProperties;
}
public String eat(){
return siriusProperties.getName() + " want to eat " + siriusProperties.getWant();
}
}
上面这里引入了一个SiriusProperties配置类,下面就来声明这个SiriusProperties配置类,这个配置类通过配置文件的前缀
prefix
进行配置的,我这里用sirius.properties
作为前缀,所以加上@ConfigurationProperties(prefix = “sirius.properties”),单纯有这个注解是不会生效的,后面需要用到@EnableConfigurationProperties注解开启配置绑定才可以配置
@ConfigurationProperties(prefix = "sirius.properties")
public class SiriusProperties {
private String name;
private String want;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getWant() {
return want;
}
public void setWant(String want) {
this.want = want;
}
}
配置文件可以这样配置,但是不会生效,需要下面@EnableConfigurationProperties注解开启配置绑定才可以
sirius.properties.name=奥利给
sirius.properties.wang=老八
下面是自动装配的逻辑,根据@Conditional条件装配注解,对上面的SiriusConfigure
进行装配,然后通过EnableConfigurationProperties开启配置绑定,这样里面@Bean修饰的SiriusConfigure类才会生效
@Configuration
@EnableConfigurationProperties(SiriusProperties.class)
@ConditionalOnMissingBean(SiriusConfigure.class)
public class SiriusAutoConfiguration {
@Bean
public SiriusConfigure siriusConfigure(SiriusProperties siriusProperties){
return new SiriusConfigure(siriusProperties);
}
}
这里我们的
AutoConfiguration
自动配置工程就准配完成了,下面准备Starter工程
XXXStarter工程
这里不做配置,只需要在当前工程引入上面的
XXXAutoConfiguration
的maven坐标就可以了,如果想要放到他们自己的本地仓库可以对上面两个maven工程分别执行clean
和install
命令就可以
我这里是
<dependency>
<groupId>com.tangyuan</groupId>
<artifactId>sirius-autoConfiguration</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
最重要的一个步骤,在项目的
resources
中新建一个名为META-INF
包,里面创建名为spring.factories
的文件,因为springboot启动时会扫描所有包路径下的META-INF下的spring.factories文件,然后进行自动装配,所以这里文件里面要指定需要自动装配的类,这里指定需要自动装配的XXXAutoConfiguration
的路径
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.tangyuan.siriusautoconfiguration.configuration.SiriusAutoConfiguration
下面就可以在自己项目中引入自己的
starter
就可以了,我这里是
<dependency>
<groupId>com.tangyuan</groupId>
<artifactId>sirius-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
然后在自己项目的配置文件中配置如之前所示的
properties
配置文件也可以是yaml
配置文件
sirius:
properties:
name: 老八
want: 奥利给
接下来进行测试,首先写一个
Controller
,然后进行依赖注入SiriusConfigure
,之后进行localhost:9090/tangyuan/eat,端口用自己的
@RestController
@RequestMapping("/tangyuan")
public class CustomizationSiriusController {
@Autowired
SiriusConfigure siriusConfigure;
@GetMapping("/eat")
public String customerPropertiesTest(){
String eat = siriusConfigure.eat();
return eat;
}
}
效果展示