前段时间看到松哥写的自定义starter文章,学有所得,所以总结一下。
SpringBoot starter机制:
SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。
为什么要自定义starter?
在工作中,可能会遇到一些独立于业务之外的配置模块,如果另一个项目复用这块功能的时候,我们可以把独立于业务代码之外的功配置模块封装成一个个starter,复用的时候只需要将其在pom中引用依赖即可,没必要再重新写那模块的代码。
自定义starter:
(1)新建maven项目,添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>
(2)创建一个 MyProperties 类,用来接受 application.properties 中注入的值
@ConfigurationProperties(prefix = "starter")
public class MyProperties {
private static final String DEFAULT_NAME = "starter";
private static final String DEFAULT_MSG = "create new starter ";
private String name = DEFAULT_NAME;
private String msg = DEFAULT_MSG;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
(3)配置完成MyProperties 后,接下来我们来定义一个 MyService ,然后定义一个简单的 say 方法, MyService 的定义如下:
public class MyService {
private String msg;
private String name;
public String sayHello() {
return name + " say " + msg + " !";
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
(4)自动配置类的定义
@Configuration
@EnableConfigurationProperties(MyProperties.class)
@ConditionalOnClass(MyService.class)
public class MyServiceAutoConfiguration {
@Autowired
MyProperties myProperties;
@Bean
MyService helloService() {
MyService myService = new MyService();
myService.setName(myProperties.getName());
myService.setMsg(myProperties.getMsg());
return myService;
}
}
- 首先 @Configuration 注解表明这是一个配置类
- @EnableConfigurationProperties 注解是使我们之前配置的 @ConfigurationProperties 生效,让配置的属性成功的进入 Bean 中。
- @ConditionalOnClass 表示当项目当前 classpath 下存在 MyService 时,后面的配置才生效。
自动配置类中首先注入 MyProperties ,这个实例中含有我们在 application.properties 中配置的相关数据。 - 提供一个 MyService 的实例,将 MyProperties 中的值注入进去。
我们要复用这个功能的时候只需要把它打包后的maven引入即可
版权声明:本文为qq_37606901原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。