pom
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<scope>compile</scope>
<optional>true</optional>
</dependency>
</dependencies>
Properties
@ConfigurationProperties(prefix = "com.zl.starter")
public class ZlProperties {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
需要被配置的bean
public class HelloHandler {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String sayHello(){
return getName()+" say Hello";
}
}
配置类
配置类的@Configuration可以删掉。原理在springboot starter原理简单介绍和spring @Import介绍找到。简单来说就是属于一种Lite模式的配置类。
@Configuration
@EnableConfigurationProperties(ZlProperties.class)
//生成spring-autoconfigure-metadata.properties
@ConditionalOnClass({HelloHandler.class})
public class ZlAutoConfiguration{
private final ZlProperties zlProperties;
@Autowired
public ZlAutoConfiguration(ZlProperties properties) {
this.zlProperties = properties;
}
@Bean
public HelloHandler helloHandler(){
HelloHandler helloHandler = new HelloHandler();
helloHandler.setName(zlProperties.getName());
return helloHandler;
}
}
spring.factories配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.starter.autoconfigure.ZlAutoConfiguration
使用
引入starter
<dependency>
<groupId>com.zl</groupId>
<artifactId>zl-spring-boot-starter</artifactId>
<version>0.0.1</version>
</dependency>
配置application.properties
com.zl.starter.name=hh
注入HelloHandler
@Resource
private HelloHandler helloHandler;
@PostConstruct
public void a() {
System.out.println(helloHandler.sayHello());
}
结果为: hh say Hello。
附A
生成的spring-autoconfigure-metadata.properties