1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 3573字,需瀏覽 8分鐘

         ·

        2022-04-25 07:53

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

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

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

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

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


        自定義SpringBootStarter項(xiàng)目

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

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

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

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

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

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

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

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

        有了屬性配置類和服務(wù)類,下面就是通過自動配置類將其整合, 并在特定條件下進(jìn)行實(shí)例化操作。自動配置類本質(zhì)上就是一個(gè)普通的 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 方法, 在此也可以調(diào)用對應(yīng)方法對其進(jìn)行相應(yīng)的沒置或初始化
        return msgService;
        }
        }

        MsgAutoConfiguration 類 上 的 注 解 , @Configuration 用 來 聲 明 該 類 為 一 個(gè) 配 置類;@ConditionalOnClass 注解表示只有當(dāng) MsgService 類存在于 classpath 中,該類才會進(jìn)行相應(yīng)的實(shí)例化; @
        EnableConfigurationProperties 會將 application.properties 中對應(yīng)的屬性配置設(shè)置于 MsgProperties 對象中。


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

        @ConditionalOnProperty 表示當(dāng)配置文件中 msg.enabled=true 時(shí)才進(jìn)行相應(yīng)的實(shí)例化操作,默認(rèn)情況下不會進(jìn)行實(shí)例化操作。

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

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

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

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


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

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

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

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


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

        瀏覽 67
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            狠狠干狠狠操 | 免费A级毛片无码专区 | 久久久久久久久久久韩国男女 | 欧美成人毛片一级A片 | 黄色在线观看国产 | 国产三级韩国三级日产三级剧情 | xxxx性睡眠xxxx | 麻豆成人免费 | 国产一级婬片A片AAA片口技 | 神马午夜伦理影片 |