starter模式
1、用户引用启动器
2、启动器只用来导入核心功能
3、核心功能通过读取配置的方式获取用户的属性设置
4、暴露给用户的都是starter和配置规则,不管什么乱七八糟的功能。
步骤
1、启动器模块
在一个空项目下创建一个maven module。artifactId以固定规格命名。
这个module依赖的czy-spring-boot-starter-autoconfigurer在步骤2创建
<groupId>com.czy</groupId>
<artifactId>czy-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- 启动器,引入自动配置-->
<dependency>
<groupId>com.czy</groupId>
<artifactId>czy-spring-boot-starter-autoconfigurer</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
2、自动配置模块
- 在步骤1的项目下 新建一个module,可使用spring initializr创建向导创建。只需要依赖 springboot的web模块。可把test模块去掉。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.czy</groupId>
<artifactId>czy-spring-boot-starter-autoconfigurer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>czy-spring-boot-starter-autoconfigurer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>12</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
- 在resources下新建META-INF/spring.factories文件。
spring.factories:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.czy.HelloServiceAutoConfiguration
- HelloProperties.class读取用户在配置文件的配置
用户可在自己项目的application.properties文件配置:
czy.hello.prefix=qianzhui
czy.hello.suffix=houzhui
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "czy.hello")
public class HelloProperties {
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;
}
}
- HelloService.class实现功能
public class HelloService {
HelloProperties helloProperties;
public HelloProperties getHelloProperties() {
return helloProperties;
}
public void setHelloProperties(HelloProperties helloProperties) {
this.helloProperties = helloProperties;
}
public String sayHello(String name){
return helloProperties.getPrefix()+"-"+name+helloProperties.getSuffix();
}
}
- HelloServiceAutoConfiguration.class 把properties传给service。再把service自动注入容器
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(HelloProperties.class)
public class HelloServiceAutoConfiguration {
@Autowired
HelloProperties helloProperties;
@Bean
public HelloService helloService(){
HelloService helloService = new HelloService();
helloService.setHelloProperties(helloProperties);
return helloService;
}
}
starter代码编写完毕
3、安装到maven仓库
被依赖的模块要先安装。
4、使用
创建新项目来使用我们刚刚做好的starter
- 依赖:
<dependency>
<groupId>com.czy</groupId>
<artifactId>czy-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
- 配置:
- 浏览器访问指定请求即可。
这个starter有个问题没有解决,即czy.hello.prefix=中文 时,有乱码出现