最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java SpringBoot自定義starter詳解

 更新時間:2022年01月12日 09:21:20   作者:代碼世界里的小李  
大家好,本篇文章主要講的是Java SpringBoot自定義starter詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次

一、什么是SpringBoot starter機制

 SpringBoot中的starter是一種非常重要的機制(自動化配置),能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進starter,
   應用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應的默認配置。
   starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾。SpringBoot會自動通過classpath路徑下的類發(fā)現(xiàn)需要的Bean,
   并注冊進IOC容器。SpringBoot提供了針對日常企業(yè)應用研發(fā)各種場景的spring-boot-starter依賴模塊。
   所有這些依賴模塊都遵循著約定成俗的默認配置,并允許我們調(diào)整這些配置,即遵循“約定大于配置”的理念。 

二、為什么要自定義starter ?

在我們的日常開發(fā)工作中,經(jīng)常會有一些獨立于業(yè)務之外的配置模塊,我們經(jīng)常將其放到一個特定的包下,
   然后如果另一個工程需要復用這塊功能的時候,需要將代碼硬拷貝到另一個工程,重新集成一遍,麻煩至極。
   如果我們將這些可獨立于業(yè)務代碼之外的功配置模塊封裝成一個個starter,復用的時候只需要將其在pom中引用依賴即可,
   SpringBoot為我們完成自動裝配,簡直不要太爽

三、什么時候需要創(chuàng)建自定義starter?

    在我們的日常開發(fā)工作中,可能會需要開發(fā)一個通用模塊,以供其它工程復用。SpringBoot就為我們提供這樣的功能機制,
   我們可以把我們的通用模塊封裝成一個個starter,這樣其它工程復用的時候只需要在pom中引用依賴即可,
   由SpringBoot為我們完成自動裝配。

常見場景:
   1.通用模塊-短信發(fā)送模塊
   2.基于AOP技術實現(xiàn)日志切面

   3.分布式雪花ID,Long-->string,解決精度問題
     jackson2/fastjson

   4.微服務項目的數(shù)據(jù)庫連接池配置
   5.微服務項目的每個模塊都要訪問redis數(shù)據(jù)庫,每個模塊都要配置redisTemplate
     也可以通過starter解決

自動加載核心注解說明

四、自定義starter的開發(fā)流程(案例:為短信發(fā)送功能創(chuàng)建一個starter)

創(chuàng)建Starter項目

starter項目和SpringBoot工程結構沒有什么區(qū)別

1、細節(jié):命名規(guī)范

  SpringBoot官方命名方式
       格式:spring-boot-starter-{模塊名}
       舉例:spring-boot-starter-web
       自定義命名方式
       格式:{模塊名}-spring-boot-starter
       舉例:mystarter-spring-boot-starter

  由于的這里只做個案例給大家看,就只需要添加這幾項就好了....

2.必須引入的依賴

 <!--表示兩個項目之間依賴不傳遞;不設置optional或者optional是false,表示傳遞依賴-->
       <!--例如:project1依賴a.jar(optional=true),project2依賴project1,則project2不依賴a.jar-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-configuration-processor</artifactId>
           <optional>true</optional>
       </dependency>

該依賴在上面像我一樣選擇了的,它會自動生成在pom.xml文件中

3.編寫相關屬性類(XxxProperties):例如 SmsProperties.java

 代碼如下:

package com.zking.smscloudspringbootstarter.sms;
 
import org.springframework.boot.context.properties.ConfigurationProperties;
 
@ConfigurationProperties("smscloud.sms")
public class SmsProperties {
 
    private String accessKeyId;//訪問ID、即帳號
    private String accessKeySecret;//訪問憑證,即密碼
 
    public SmsProperties() {
    }
 
    public String getAccessKeyId() {
        return accessKeyId;
    }
 
    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }
 
    public String getAccessKeySecret() {
        return accessKeySecret;
    }
 
    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }
}

        @ConfigurationProperties注解基本用法,前綴定義了哪些外部屬性將綁定到類的字段上
       根據(jù) Spring Boot 寬松的綁定規(guī)則,類的屬性名稱必須與外部屬性的名稱匹配
       我們可以簡單地用一個值初始化一個字段來定義一個默認值
       類本身可以是包私有的
       類的字段必須有公共 setter 方法

 注意:SmsProperties代碼寫完后會報如下錯誤,這是正常的,因為
           還有配置類AutoConfig和一個注解@EnableConfigurationProperties沒有加
           Not registered via @EnableConfigurationProperties or marked as Spring component

4.編寫Starter項目的業(yè)務功能 

     ISmsService和SmsServiceImpl

package com.zking.smscloudspringbootstarter.sms;
 
public interface ISmsService {
 
    /**
     * 發(fā)送短信
     *
     * @param phone        要發(fā)送的手機號
     * @param signName     短信簽名-在短信控制臺中找
     * @param templateCode 短信模板-在短信控制臺中找
     * @param data         要發(fā)送的內(nèi)容
     */
    void send(String phone, String signName, String templateCode, String data);
}
 
 
 
public class SmsServiceImpl implements ISmsService{
 
    private String accessKeyId;//訪問ID、即帳號
    private String accessKeySecret;//訪問憑證,即密碼
 
    public SmsServiceImpl(String accessKeyId, String accessKeySecret) {
        this.accessKeyId = accessKeyId;
        this.accessKeySecret = accessKeySecret;
    }
 
    @Override
    public void send(String phone, String signName, String templateCode, String data) {
        System.out.println("接入短信系統(tǒng),accessKeyId=" + accessKeyId + ",accessKeySecret=" + accessKeySecret);
        System.out.println("短信發(fā)送,phone=" + phone + ",signName=" + signName + ",templateCode=" + templateCode + ",data=" + data);
    }
}

5.編寫自動配置類AutoConfig 

 1. @Configuration: 定義一個配置類
 2. @EnableConfigurationProperties:注解的作用是@ConfigurationProperties注解生效。
       如果只配置@ConfigurationProperties注解,在IOC容器中是獲取不到properties配置文件轉化的bean的

 代碼如下:

package com.zking.smscloudspringbootstarter.config;
 
import com.zking.smscloudspringbootstarter.sms.SmsProperties;
import com.zking.smscloudspringbootstarter.sms.SmsServiceImpl;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import javax.annotation.Resource;
 
@Configuration //表示該類為配置類
@EnableConfigurationProperties({SmsProperties.class})
public class SmsAutoConfig {
    @Resource
    private SmsProperties smsProperties;
 
    @Bean
    public SmsServiceImpl smsServiceImpl(){
 
        return new SmsServiceImpl(smsProperties.getAccessKeyId(),smsProperties.getAccessKeySecret());
    }
}

 6.編寫spring.factories文件加載自動配置類

1.在resources下新建META-INF文件夾,然后創(chuàng)建spring.factories文件
2.在該文件中加入如下配置,該配置指定上步驟中定義的配置類為自動裝配的配置

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.zking.zzcloudspringbootstarter.config.SmsAutoConfig

 注:其中AutoConfig是starter配置文件的類限定名,多個之間逗號分割,還可以\進行轉義即相當于去掉后面換行和空格符號  

7.打包安裝

打包時需要注意一下,SpringBoot項目打包的JAR是可執(zhí)行JAR,它的類放在BOOT-INF目錄下,如果直接作為其他項目的依賴,會找不到類??梢酝ㄟ^修改pom文件來解決,代碼如下:

<plugin>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-maven-plugin</artifactId>
         <configuration>
             <classifier>exec</classifier>
         </configuration>
     </plugin>

然后再進行打包

 打包成功后就可以再其他項目引用了,我們可以再maven倉庫中看到

我們先查看下自己的maven倉庫放哪了,然后去找到對應的地方

 上面就是打包成功的樣子

8.其它項目引用

1.首先在其他項目的pom.xnml中引入依賴

 2、在application.yml文件中添加配置

然后我們可以寫一個測試類來測試一下

 以上就是案例的一個流程,可以看到我們是可以在其他項目中可以看到我們想要是功能的

總結 

本文簡單介紹了下springboot中starter機制,以及一個案例的編寫。如有不足,歡迎補充

敖丙說過:你知道的越多,不知道的越多

到此這篇關于Java SpringBoot自定義starter詳解的文章就介紹到這了,更多相關Java SpringBoot自定義starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • spring事務的propagation傳播屬性示例詳解

    spring事務的propagation傳播屬性示例詳解

    這篇文章主要為大家介紹了spring事務的propagation傳播屬性示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • SimpleDateFormat線程安全問題排查詳解

    SimpleDateFormat線程安全問題排查詳解

    這篇文章主要為大家介紹了SimpleDateFormat線程安全問題排查詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • JDK1.7的ConcurrentHashMap源碼解析

    JDK1.7的ConcurrentHashMap源碼解析

    這篇文章主要介紹了JDK1.7的ConcurrentHashMap源碼解析,HashMap是非線程安全的,而HashTable是線程安全的,但是HashTable實現(xiàn)同步的方法比較暴力,即在所有的方法體上添加synchronized關鍵字,需要的朋友可以參考下
    2023-12-12
  • spring啟動后保證創(chuàng)建的對象不被垃圾回收器回收

    spring啟動后保證創(chuàng)建的對象不被垃圾回收器回收

    最近看到一個問題是,spring在啟動后如何保證創(chuàng)建的對象不被垃圾回收器回收?。所以本文結合jvm的垃圾回收機制和spring中的源代碼做出自己的一點猜測。有需要的朋友們可以參考借鑒。
    2016-09-09
  • 基于SpringBoot開機啟動與@Order注解

    基于SpringBoot開機啟動與@Order注解

    這篇文章主要介紹了SpringBoot開機啟動與@Order注解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring中@PropertySource的使用方法和運行原理詳解

    Spring中@PropertySource的使用方法和運行原理詳解

    這篇文章主要介紹了Spring中@PropertySource的使用方法和運行原理詳解,PropertySource注解可以方便和靈活的向Spring的環(huán)境容器(org.springframework.core.env.Environment?Environment)中注入一些屬性,這些屬性可以在Bean中使用,需要的朋友可以參考下
    2023-11-11
  • 使用jdk1.8實現(xiàn)將list根據(jù)指定的值去分組的操作

    使用jdk1.8實現(xiàn)將list根據(jù)指定的值去分組的操作

    這篇文章主要介紹了使用jdk1.8實現(xiàn)將list根據(jù)指定的值去分組的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • 如何使用Code128字體將文本轉換為code128條形碼

    如何使用Code128字體將文本轉換為code128條形碼

    這篇文章主要介紹了如何使用Code128字體將文本轉換為code128條形碼 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • Nacos入門過程的坑--獲取不到配置的值問題

    Nacos入門過程的坑--獲取不到配置的值問題

    這篇文章主要介紹了Nacos入門過程的坑--獲取不到配置的值問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 詳解Java中的日期類

    詳解Java中的日期類

    這篇文章主要介紹了Java中的日期類的相關資料,幫助大家更好的利用Java處理時間,感興趣的朋友可以了解下
    2020-10-10

最新評論

岳西县| 阿克| 宜丰县| 光泽县| 南汇区| 措勤县| 洛南县| 兴化市| 河池市| 吉隆县| 四平市| 阿图什市| 龙泉市| 清镇市| 陆良县| 台山市| 黔东| 酉阳| 张家界市| 安陆市| 邹城市| 偏关县| 永济市| 宁晋县| 南投县| 宝应县| 永仁县| 冕宁县| 南部县| 绥滨县| 鹤岗市| 循化| 南通市| 巩义市| 柯坪县| 武安市| 桂东县| 临清市| 台东市| 新河县| 本溪|