SpringBoot中的自定义starter
自定义starter
所谓的 starter ,其实就是一个普通的 Maven 项目。
1、首先创建一个普通的 Maven 项目
引入自动化配置依赖:
1 2 3 4 5 6 7 | < dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-autoconfigure</ artifactId > < version >2.1.8.RELEASE</ version > <!-- 表明不传递spring-boot-autoconfigure依赖 --> < optional >true</ optional > </ dependency > |
注意:在自定义的starter 的pom中,将spring-boot-autoconfigure的maven依赖声明为<optional>true</optional>,表明自定义的starter的jar包不会传递spring-boot-autoconfigure依赖;否则会将spring-boot-autoconfigure版本固定,导致引用自定义starter的应用出现版本冲突问题。
starter命名模式 --> ${module}-spring-boot-starter;
例如:
1 2 3 | < groupId >com.hello</ groupId > < artifactId >helloService-spring-boot-starter</ artifactId > < version >0.0.1-SNAPSHOT</ version > |
2、创建一个配置类
创建一个配置类 HelloProperties 来接受 application.properties 中注入的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @ConfigurationProperties (prefix = "javaboy" ) public class HelloProperties { privatestaticfinal String DEFAULT_NAME = "默认名" ; privatestaticfinal String DEFAULT_MSG = "默认消息" ; private String name = DEFAULT_NAME; private String msg = DEFAULT_MSG; public String getName() { return name; } public void setName(String name) { this .name = name; } public String getMsg() { return msg; } public void setMsg(String msg) { this .msg = msg; } } |
3、创建一个服务类 HelloService
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public class HelloService { private String msg; private String name; public String sayHello() { return name + " say " + msg + " !" ; } public String getMsg() { return msg; } public void setMsg(String msg) { this .msg = msg; } public String getName() { return name; } public void setName(String name) { this .name = name; } } |
4、自定义自动配置类
SpringBoot自动装配的命名规则:
- 自动装配类应命名为:XxxAutoConfiguration;
- 自动装配package命名模式: ${root-package}.autoconfigure.${module-package},比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @Configuration @EnableConfigurationProperties (HelloProperties. class ) @ConditionalOnClass (HelloService. class ) public class HelloServiceAutoConfiguration { @Autowired HelloProperties helloProperties; @Bean HelloService helloService() { HelloService helloService = new HelloService(); helloService.setName(helloProperties.getName()); helloService.setMsg(helloProperties.getMsg()); return helloService; } } |
注解 @EnableConfigurationProperties 使我们之前配置的 @ConfigurationProperties 生效,让配置的属性注入到 Bean 中。
注解 @ConditionalOnClass 表示当项目的 classpath 下存在 HelloService 时,后面的配置才生效。
5、创建 spring.factories 文件
在resources目录下新建 META-INF/spring.factories 文件:
1 2 | org.springframework.boot.autoconfigure.EnableAutoConfiguration = \ com.hello.autoconfigure.HelloServiceAutoConfiguration |
这里的key是固定的,value是我们的自动配置类的全路径。
SpringBoot 项目启动时,会做自动配置,会去扫描所有jar包中的 META-INF/spring.factories 配置文件。
至此,自定义的starter已完成。将这个自动化配置类的项目安装到maven仓库中,然后在其他项目中引入依赖就可以使用。
新建一个普通的 Spring Boot 工程,并加入我们自定义的 starter 的依赖:
1 2 3 4 5 | < dependency > < groupId >com.hello</ groupId > < artifactId >helloService-spring-boot-starter</ artifactId > < version >0.0.1-SNAPSHOT</ version > </ dependency > |
此时我们项目中已有一个 helloService 实例可以使用,而且我们还可以配置它的属性数据,例如,在 application.properties 中配置:
我们做个单元测试:
1 2 3 4 5 6 7 8 9 10 | @RunWith (SpringRunner. class ) @SpringBootTest public class MystarterApplicationTest { @Autowired private HelloService helloService; @Test public void contextLoads() { System.out.println(helloService.sayHello()); } } |
控制台会打印:
我的名字 say 提示消息 !
到此这篇关于SpringBoot中的自定义starter的文章就介绍到这了,更多相关自定义starter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
浅谈javaSE 面向对象(Object类toString)
下面小编就为大家带来一篇浅谈javaSE 面向对象(Object类toString)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-06-06JAVA序列化Serializable及Externalizable区别详解
这篇文章主要介绍了JAVA序列化Serializable及Externalizable区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-07-07
最新评论