javascript
SpringBoot之如何自定义一个starter模块
前言
前面我們說到了在SpringBoot中自定義Enable模塊,那么如何在SpringBoot中如何自定義一個Starter模塊呢?要想自定義一個Starter模塊,就需要理解自動裝配的原理。
首先,想想我們自動裝配涉及到哪些關鍵的類或者屬性文件?無非就是配置類+spring.factories屬性文件。
自定義starter的條件
開始實施
第一步:定義好需要通過配置類來實例化的Bean
public class MsgService {private String url;private String content;public MsgService(String url, String content) {this.url = url;this.content = content;}public String sendMsg() {System.out.println("**********消息發送成功,地址=" + url + ",內容=" + content + "");return "消息發送成功,地址=" + url + ",內容=" + content + "";}}這里定義的bean沒啥好說的。
第二步: 定義好屬性類
@ConfigurationProperties(prefix = "msg") public class MsgProperties {/*** 消息發送地址*/private String url;/*** 發送內容*/private String content;//get,set方法省略這里通過@ConfigurationProperties注解將配置文件的前綴為msg的配置信息與自身的屬性綁定,所有在配置文件中能配置的屬性都在MsgProperties類中封裝著,配置文件能配置什么只需要看這個屬性類的屬性。
第二步:定義好配置類
@Configuration @ConditionalOnClass(MsgService.class) @EnableConfigurationProperties(MsgProperties.class) public class MsgConfiguration {/*** 注入屬性類*/@Autowiredprivate MsgProperties msgProperties;@Bean@ConditionalOnMissingBean({MsgService.class})public MsgService msgService() {return new MsgService(msgProperties.getUrl(), msgProperties.getContent());} }@Bean注解表明該方法實例化的對象會被加載到容器當中;
@ConditionalOnMissingBean注解指明當容器中不存在MsgService的對象時再進行實例化;@EnableConfigurationProperties注解是使MsgProperties生效,也就是將MsgProperties類注入到IOC容器中。
@ConditionalOnClass 注解表明只有classpath下能找到MsgService類時才會構建這個Bean。
第三步:定義好spring.factories屬性文件
要想實現自動配置,那么spring.factories屬性文件是必不可少的,因為SpringBoot需要通過spring.factories找到需要實例化的配置類。然后通過SPI的方式來實例化。
所以,我們需要在resources 下面增加 META-INF/spring.factories
打包上傳到本地倉庫
上面的步驟都搞好之后,我們這個自定義的starter模塊差不多就可以用了,為了上其他項目可以引入我們的自定義的starter模塊,我們需要通過mvn install命令將這個starter包上傳到我們本地倉庫或者私服。
其他項目引入我們自定義的starter模塊
1. 引入依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency> <!--自定義的starter--><dependency><groupId>com.jay</groupId><artifactId>springboot-custom-starter2</artifactId><version>0.0.1-SNAPSHOT</version></dependency>2. 在application.properties文件中增加配置
msg.url=127.0.0.1 msg.content=nice to meet you3.測試
@RestController public class HelloWorldController {@Autowiredprivate MsgService msgService;@RequestMapping(value = "/testSendMsg")public String testSendMsg() {String sendMsg = msgService.sendMsg();return sendMsg;} }啟動項目,訪問接口,結果如下:
總結
本文完整的演示了一遍如何自定義starter模塊。其實理解了自動裝配的原理就很好的能自定義一個starter模塊。它的工作流程無非就三步:
希望對讀者朋友們有所幫助。
參考
SpringBoot自定義starter及自動配置
源碼下載
源碼下載
總結
以上是生活随笔為你收集整理的SpringBoot之如何自定义一个starter模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP MTO案例教程AP应付会计前台操
- 下一篇: 企业级spring-boot案例-自定义