<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          創(chuàng)建SpringBoot自動配置:自定義Starter項目

          共 3573字,需瀏覽 8分鐘

           ·

          2022-04-25 07:53

          創(chuàng)建SpringBoot自動配置項目

          經(jīng)過前面章節(jié)的學習,我們已經(jīng)了解了 Spring Boot 的核心運作原理,同時也學習了幾個常用框架的自動配置機制及源代碼解析。Spring Boot 默認實現(xiàn)了許多的 starter,可以在項目中快速集成。但如果我們所需的 starter 并不在其中,又想借鑒 Spring Boot 的 starter 的創(chuàng)建機制來創(chuàng)建自己框架 starter,該怎么辦呢?本章將帶領大家創(chuàng)建一個自定義的 starter 項目。

          在具體實踐的過程中我們會經(jīng)常遇到這樣的情況,比如幾個項目都需要發(fā)送短信驗證碼的子項目(針對大多數(shù)沒有采用服務化的場景)。那么,最笨的方法就是每個項目中都重新寫一份執(zhí)行程序, 或者更進一步是創(chuàng)建一 個單獨的子項目,然后每個項目都依賴 jar 包。如果項目采用的是 Spring Boot 的項目框架,那事情就會變得更加簡單,這時候 Spring Boot 的自動配置便派上用場了

          下面,我們就以發(fā)送短信驗證碼這樣的場景來自定義- -個 starter.在此之前,我們先總結一下之前講解的自動配置 starter 的基本條件。

          首先,需要在 classpath 中存 在用于判斷是否進行自動配置的類;然后,當滿足這些條件之后,需要通過自定義的 Bean 將其實例化并注冊到容器中;最后,這一過程通過 Spring Boot自動配置的機制自動完成。關于自動配置機制的實現(xiàn),我們已經(jīng)在前面章節(jié)中詳細講述過了。


          自定義SpringBootStarter項目

          這里通過 maven 項目管理工具進行 starter 的創(chuàng)建。首先創(chuàng)建一個簡單的 maven 項目,該項目可通過 Intellj idea 等 IDE 進行創(chuàng)建,也可通過 maven 命令進行創(chuàng)建。創(chuàng)建之后項目的目錄結構如下。

          -一 spring - boot-starter-msg. iml
          -main
          test

          在完成了項目的創(chuàng)建和基礎依賴的添加之后,便開始相應功能的實現(xiàn)。首先,創(chuàng)建一個MsgService 類。該類不僅提供了短信發(fā)送的功能實現(xiàn),也會被用于 Spring Boot 判斷是否進行自動配置的核心類。而后者的場景就是 SpringBoot 用于檢查 classpath 中是否存在該類。

          <dependency>
          <groupId>org. spri ngframework . boot< / groupId>
          <artifactId>spring- boot - autoconfigureartifactId>
          <version>2.2.1. RELEASEversion>
          dependency>

          在 MsgService 中用到了一一個工具類 HttpClientUtils。在 HttpClientUtils 這里僅以打印請求的參數(shù)信息用作示例,生產(chǎn)環(huán)境中根據(jù)具體場景進行實現(xiàn)。

          public class HttpClientUtils {
          public static int sendMsg(String url, String accessKeyId, String accessKe
          Secret, String msg
          )
          {
          // TODO 調用指定 url 進行請求的業(yè)務邏輯
          System. out . println("Http 請求,url=" + url + ";accessKeyId=" + accessKey
          Id +
          ";accessKeySecret=" + accessKeySecret + ";msg=" + ms
          g)
          return 0; }}

          完成了基礎的功能類實現(xiàn)之后,下一步提供自動配置的屬性配置類 MsgProperties,它的作用是封裝 application.properties 或 application.yml 中的基礎配置。在這里就是關于短信發(fā)送的基礎參數(shù),前綴統(tǒng)一采用 msg, 通過@ConfigurationProperties 注解來進行對應屬性的裝配。

          @ConfigurationProperties(prefix = "msg")
          public class MsgProperties {
          /**
          訪問發(fā)送短信的 url 地址
          private String url;
          /**
          短信服務商提供的請求 keyId
          private String accessKeyId;
          /**
          短信服務商提供的 KeySecret
          private String accessKeySecret;
          //省略 getter/setter 方法
          }

          有了屬性配置類和服務類,下面就是通過自動配置類將其整合, 并在特定條件下進行實例化操作。自動配置類本質上就是一個普通的 Java 類 ,通過不同的注解來對其賦予不同的功能。

          @Configuration
          @ConditionalOnClass (MsgService. class)
          @EnableConfigurationProperties (MsgProperties.class)
          public class MsgAutoConfiguration {
          /**
          注入屬性配置類
          @Resource
          private MsgProperties msgProperties;
          @Bean
          @ConditionalOnMissingBean(MsgService.class)
          @ConditionalOnProperty(prefix = "msg", value = "enabled", havingValue =
          "true")
          public MsgService msgService() {
          MsgService msgService = new MsgService(msgProperties. getUr1(), msgPrope
          rties.
          msgProperties . getAccessKeySecret());
          /如果提供了其他 set 方法, 在此也可以調用對應方法對其進行相應的沒置或初始化
          return msgService;
          }
          }

          MsgAutoConfiguration 類 上 的 注 解 , @Configuration 用 來 聲 明 該 類 為 一 個 配 置類;@ConditionalOnClass 注解表示只有當 MsgService 類存在于 classpath 中,該類才會進行相應的實例化; @
          EnableConfigurationProperties 會將 application.properties 中對應的屬性配置設置于 MsgProperties 對象中。


          MsgAutoConfiguration 的 msgService 方法上的注解,@Bean 表明該方法實例化的對象會被加載到容器中; @ConditionalOnMissingBean 表示當容 器中不存在 MsgService 的對象時,才會進行實例化操作;

          @ConditionalOnProperty 表示當配置文件中 msg.enabled=true 時才進行相應的實例化操作,默認情況下不會進行實例化操作。

          基本功能已經(jīng)完成,我們只需要將 MsgAutoConfiguration 類進行自動配置注冊即可。在前面的章節(jié)中我們已經(jīng)了解到,凡是 classpath' 下 jar 包中 META-INF/spring.factories 中的配置 ,在 Spring Boot 啟動時都會進行相應的掃描加載。因此,我們無須直接修改 SpringBoot 的 spring.factories 文件, 只需在新建的 starter 項目中添加對應目錄和文件即可。

          在當前項目的 resources 目錄下創(chuàng)建 META-INF/spring.factories 文件,并對自動配置類進行注冊。如果有多個自動配置類,用逗號分隔換行即可。

          org. springframework . boot . autoconfigure . EnableAutoConfiguration=\com. secbro2 .
          msg. MsgAutoConfiguration

          至此,一個基于Spring Boot 的自動配置 starter 便完成了。使用 maven 將其打包到本地倉庫或上傳至私服,其他項目便可以通過 maven 依賴進行使用。


          本文給大家講解的內(nèi)容是創(chuàng)建SpringBoot自動配置項目:自定義Spring BootStarter項目

          1. 1.下篇文章給大家講解的是創(chuàng)建SpringBoot自動配置項目:Starter測試使用;

          2. 2.覺得文章不錯的朋友可以轉發(fā)此文關注小編;

          3. 3.感謝大家的支持!


          本文就是愿天堂沒有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學習更多的話可以到微信公眾號里找我,我等你哦。

          瀏覽 67
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.国产高清 | 高清人妻无码 | 国产亚洲影| 一本色道久久综合亚洲精品按摩 | 欧美大屌视频 |