自定义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;
}
}
效果展示

本文介绍了如何创建一个自定义的SpringBootStarter,包括创建XXXAutoConfiguration工程来实现自动配置,使用@ConditionalOnMissingBean注解进行条件装配,以及在XXXStarter工程中引入依赖并配置spring.factories文件。此外,还详细说明了配置属性类的创建、配置文件的绑定以及在实际项目中的使用和测试过程。
941

被折叠的 条评论
为什么被折叠?



