springboot自定义STARTER实例
过程描述:
一、创建一个empty-Project 。然后追加两个module。一个是maven项目,用于做自动配置的属性和功能类,另一个是web项目,用来引用autoconfigurer配置工程。
1、在starter的pom.xml中,引用autoconfigurer。
<groupId>com.zhiyuan.starter</groupId>
<artifactId>zhiyuan-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.zhiyuan.starter</groupId>
<artifactId>zhiyuan-spring-boot-starter-autoconfigurer</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2、自动配置autoconfigurer的pom.xml,并将test相关的引用和build都删掉。
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
com.zhiyuan.starter
zhiyuan-spring-boot-starter-autoconfigurer
0.0.1-SNAPSHOT
zhiyuan-spring-boot-starter-autoconfigurer
Demo project for Spring Boot
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
3、autoconfigurer项目的结构,删除autoconfigurer中的test模块和相应的配置。
二、开始写代码
1、在autoconfigurer工程中,创建TalkServiceAutoconfiguration.java
/@Configuration用于定义配置类,可替换xml配置文件,
被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描
,并用于构建bean定义,初始化Spring容器。/
@Configuration
//web应用生效,根据@Conditional不同的条件创建不同的bean。Condition是个接口,需要实现matches方法,返回true则注入bean,false则不注入。
@ConditionalOnWebApplication
//相当于把使用 @ConfigurationProperties 的类进行了一次注入。
@EnableConfigurationProperties(TalKProperties.class)
public class TalkServiceAutoconfiguration {
@Autowired
TalKProperties talKProperties;
@Bean
public TalkService getTalkService(){
TalkService talkService=new TalkService();
talkService.setTalKProperties(talKProperties);
return talkService;
}
}
2、创建TalKProperties.java文件
//@ConfigurationProperties 注解,我们可以方便的获取这些参数值.
@ConfigurationProperties(prefix = “zhiyuan.talk”)
public class TalKProperties {
private String prefix;
private String suffix;
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}
3、创建调用类TalkService.java.
public class TalkService {
TalKProperties talKProperties;
public TalKProperties getTalKProperties() {
return talKProperties;
}
public void setTalKProperties(TalKProperties talKProperties) {
this.talKProperties = talKProperties;
}
public String talkToLead(String name) {
return talKProperties.getPrefix() +"----"+name +"-----" + talKProperties.getSuffix();
}
}
4、在META-INFO中创建配置文件spring.factories。
文件中配置内容
org.springframework.boot.autoconfigure.EnableAutoConfiguration=
com.zhiyuan.starter.demo.TalkServiceAutoconfiguration
5、将autoconfigurer工程,install发布。starter工程,install发布
三、新建一个web工程,
1、在pom中引入发布的starter,并新建类
@RestController
public class TalkController {
@Autowired
TalkService talkService;
@GetMapping("/talk")
public String talk(){
return talkService.talkToLead(“talk to”);
}
}
2,调用结果
四,springboot实现自定义satrter,代码实现的过程描述。
1、springboot读取java配置类中的全文件路径属性,也就是放到META-INFO下的一个配置文件spring.factories配置文件。
2、根据配置文件中的配置,加载@Configuration标注的TalkServiceAutoconfiguration自动配置的java类。
3、再在类中@EnableConfigurationProperties标注,注入TalKProperties.java属性文件。
4、通过@bean,将创建一个talkService实例化到容器。