内容纲要
自定义SpringBootStarter
命名
Spring官方建议非官方Starter命名应遵循 {name}-spring-boot-starter 的格式
Starter需要导入的依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starters</artifactId>
<version>2.2.7.RELEASE</version>
</parent>
导入父依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>3.2.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
导入开发Starter需要的依赖
搭建Starter
Starter
结构
// 配置类,方便引入starter后直接从项目的配置文件配置Starter的属性
@ConfigurationProperties(prefix = "spring.myprops") // 引入"spring.myprops"前缀的配置
@Data
public class MyProperties {
private String propName="test";
private String propValue="test";
}
// Starter功能实现类,项目引入Starter后可直接调用的功能函数
@Data
@Slf4j
public class MyFunc {
private String name;
private String value;
public void doMyFunc(){
log.info("Prop Name:[{}]",name);
log.info("Prop Value:[{}]",value);
System.out.println("Name: "+name+"Value: "+value);
}
}
// 配置类
@Configuration
@EnableConfigurationProperties(MyProperties.class) // 允许MyProperties自动装配配置文件
@Slf4j
public class MyAutoConfiguration {
@Autowired
private MyProperties myProperties;
@Bean // 构造器注入依赖
@ConditionalOnMissingBean
public MyFunc getMyFunc(){
MyFunc myFunc = new MyFunc();
myFunc.setName(myProperties.getPropName());
myFunc.setValue(myProperties.getPropValue());
// myFunc.doMyFunc();
log.info("注入");
return myFunc;
}
}
让Starter在被引入后生效
1. 在Starter项目的Resources文件夹下创建配置文件
// 在spring.factories中写
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.example.MyAutoConfiguration
2. 通过自定义一个@Enable注解然后在把自动配置类通过Import注解引入进来。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({MyAutoConfiguration.class})
public @interface EnableStarter {
}
打包部署到Maven本地仓库
maven install
maven package
引用
1.创建一个SpringBoot项目,在Dependency中引用
<dependency>
<groupId>org.example</groupId>
<artifactId>My-Starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>