用过SpringBoot的同学相信都不会陌生POM里面引用的很多第三方的Starter插件,只要引用进项目,按照配置一下properties属性就可以自然使用了,比如Mybatis等等,觉得很酷,现在自己动手也编写一个这样的插件,以提供给别的项目,方便使用,更重要的是把相同功能和性质的代码封装起来,即插即用。
1.pom的引用
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.0.0.RELEASE</version> <optional>true</optional> </dependency>
2.resources文件夹下面建立文件夹META-INF,里面建立一个文件,如:spring.factories,内容如下,路径为自己的配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=USplus.configuration.UsServiceAutoConfiguration
3.工程结构目录,这个因人而异
4.UsServiceAutoConfiguration是加载时候的配置类
package USplus.configuration; import USplus.UsProperties.UsProperties; import USplus.UsService.UsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(UsProperties.class) @ConditionalOnClass(UsProperties.class) @ConditionalOnProperty(prefix = "spring.person", value = "enabled", matchIfMissing = true) public class UsServiceAutoConfiguration { @Autowired private UsProperties usProperties; @Bean @ConditionalOnMissingBean(UsService.class) // 当容器中没有指定Bean的情况下,自动配置UsService类 public UsService usService(){ UsService usService = new UsService(usProperties); return usService; } }
5.自定义属性参数类,UsProperties
package USplus.UsProperties; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "spring.person") public class UsProperties { private String where; private String when; private String who; private String what; private String why; public String getWhere() { return where; } public void setWhere(String where) { this.where = where; } public String getWhen() { return when; } public void setWhen(String when) { this.when = when; } public String getWho() { return who; } public void setWho(String who) { this.who = who; } public String getWhat() { return what; } public void setWhat(String what) { this.what = what; } public String getWhy() { return why; } public void setWhy(String why) { this.why = why; } @Override public String toString() { return "UsProperties{" + "where='" + where + '\'' + ", when='" + when + '\'' + ", who='" + who + '\'' + ", what='" + what + '\'' + ", why='" + why + '\'' + '}'; } }
6.自定义想要做什么事的service,UsService
package USplus.UsService; import USplus.UsProperties.UsProperties; public class UsService { private UsProperties usProperties; public UsService(UsProperties usProperties){ this.usProperties = usProperties; } public String wh(){ return usProperties.toString(); } }
7.打包即可引用了,我的groupId如下
<groupId>USplus</groupId> <artifactId>us</artifactId> <version>1.0-SNAPSHOT</version>
启动后,springboot自动加载配置的属性,并且返回,我配置的是when,who,where,what,why,简单的一个小例子,初学乍练,欢迎批评指正!