Spring Boot自定义starter
2018-06-16 本文已影响0人
泛空秋慕
1.先搭建工程
1)创建一个Empty Project
在空工程的基础上创建两个模块,分别对应starter和autoconfiger
starter工程创建一个普通的maven工程即可:
自动配置工程先创建一个标准的spring boot项目:
暂时不选择其他模块:
2.配置依赖
在starter工程的pom.xml文件中配置对autoconfig的依赖
starter/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hsun</groupId>
<artifactId>starter</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--引入autoconfig的依赖-->
<dependency>
<groupId>com.hsun</groupId>
<artifactId>autoconfig</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
autoconfig的pom文件如下配置:
autoconfig/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hsun</groupId>
<artifactId>autoconfig</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>autoconfig</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--每一个starter都需要依赖spring-boot-starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
3.代码编写
1)属性配置
HelloProerties.java
package com.hsun.autoconfig;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix ="hello")
public class HelloProerties {
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;
}
}
2)判断依据类(被自动配置业务类)
HelloService.java
package com.hsun.autoconfig;
public class HelloService {
HelloProerties helloProerties;
public HelloProerties getHelloProerties() {
return helloProerties;
}
public void setHelloProerties(HelloProerties helloProerties) {
this.helloProerties = helloProerties;
}
public String sayHello(String name){
return helloProerties.getPrefix()+"-"+name +helloProerties.getSuffix();
}
}
3)自动配置类
HelloServiceAutoConfigration.java
package com.hsun.autoconfig;
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(HelloProerties.class)
public class HelloServiceAutoConfigration {
@Autowired
private HelloProerties helloProerties;
@Bean
public HelloService helloService(){
HelloService helloService = new HelloService();
helloService.setHelloProerties(helloProerties);
return helloService;
}
}
完成以上操作一个自定义的spring-boot-starter基本上开发完成了,接下来你需要做的是,注册配置
4.注册配置
要想自动配置生效,需要需要注册自动配置类,在src/main/resource 下新建META-INF/spring.factories文件,如下图:
在spring.factories文件中填写如下内容注册:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hsun.starter.HelloServiceAutoConfigration
若有多个自动配置,则用“,”隔开,此处的“\”是为了换行后还能读到属性。
5.使用自定义的starter
写到此处,自定义starter已经开发完毕,此处我们来创建一个典型的Spring Boot的Web应用,来测试自定义starter的可用性(项目创建略)
1)在pom.xml文件中引入自定义starter依赖(当然在引入之前,需要先将其install到本地仓库)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hsun</groupId>
<artifactId>hello-spring-boot-starter-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hello-spring-boot-starter-test</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.hsun</groupId>
<artifactId>starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
如下编写一个简单的Controller,来测试自定义的starter
测试结果如下: