欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解SpringBoot中自定義starter的開發(fā)與使用

 更新時間:2023年09月04日 15:13:41   作者:JK凱  
starter是SpringBoot中非常重要的一個機制,他是基于約定優(yōu)于配置的思想所衍生出來的,本文主要介紹了SpringBoot中自定義starter的開發(fā)與使用,感興趣的可以了解下

開發(fā)公司業(yè)務(wù)時,如何去封裝公共通用的代碼,常見的選擇是工具類之類,但是如果我們又需要在其他項目中使用呢?工具類復(fù)制一份過去?還有就是定義成單獨的模塊,也很好,但其實有個更好的選擇是使用自定義starter,自定義的starter在使用起來會非常方便,這篇文章主要講講如何自定義starter,大家可以基于此去封裝公司中的一些公共代碼。

介紹 starter

starterSpringBoot中非常重要的一個機制,他是基于約定優(yōu)于配置的思想所衍生出來的,摒棄了以前像Spring中需要使用一個依賴,需要添加非常多的配置,starter會在引入依賴時自動掃描需要加載的默認(rèn)模塊及配置,發(fā)現(xiàn)我們所定義的Bean并自動注冊到IOC容器中。

一、創(chuàng)建 SpringBoot 項目并引入依賴

命名規(guī)范

  • SpringBoot官方的starter命名規(guī)范為:spring-boot-starter-{name}
  • 自定義starter命名規(guī)范為:{name}-spring-boot-starter

首先通過IDEA創(chuàng)建一個SpringBoot項目。

這里我通過一個簡單的日志功能來實現(xiàn)自定義starter功能,創(chuàng)建一個mylog-spring-boot-starter項目。對應(yīng)的pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.15</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.jk</groupId>
    <artifactId>mylog-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mylog-spring-boot-starter</name>
    <description>mylog-spring-boot-starter</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>
    </dependencies>
</project>

引入的依賴:

  • spring-boot-autoconfigure:這個依賴是實現(xiàn)自動配置的核心依賴,它會根據(jù)定義的META-INF/spring.factories里面定義的類全路徑去找到這個類,然后根據(jù)@Bean注解所描述的方法注冊BeanIOC容器中。
  • spring-boot-configuration-processor:這個依賴是為了實現(xiàn)在application.yml中定義配置時的提示功能。
  • lombok:實現(xiàn)類中自動補全getter、setter、構(gòu)造器等方法。

二、定義核心的 Service

這個service即在業(yè)務(wù)項目引入這個starter時可以自動裝配的類。

service.MyLogService:

import lombok.Data;
@Data
public class MyLogService {
    private String prefix;
    private String suffix;
    public void print(String log) {
        System.out.println(prefix + " " + log + " " + suffix);
    }
}

定義了一個print方法,實現(xiàn)日志的打印,日志的前綴和后綴我們會在后面的Properties中定義一個默認(rèn)的,也可以通過在引入這個starter的業(yè)務(wù)模塊中通過配置文件修改。

三、定義 Properties

定義Properties類來實現(xiàn)JavaConfig功能,把application.ymlapplication.properties中的配置讀取映射到Java類上。

config.MyLogProperties:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
@Data
@ConfigurationProperties(prefix = "mylog")
public class MyLogProperties {
    private String prefix = "myPrefix";
    private String suffix = "mySuffix";
}
  • @Data:通過這個lombok的注解實現(xiàn)類的setter、getter、構(gòu)造器方法的自動補全。
  • @ConfigurationProperties:通過這個注解實現(xiàn)類與配置文件的綁定和值的注入,通過prefix可以定義在配置文件中的統(tǒng)一前綴。比如配置文件中mylog.prefix的值就會綁定到類中prefix屬性上。

四、定義 AutoConfiguration

定義AutoConfiguration類,引入starter時,會自動配置的類,它會自動注冊里面的@Beanspring中IOC容器中。

config.MyLogAutoConfiguration:

import com.jk.mylogspringbootstarter.service.MyLogService;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableConfigurationProperties(MyLogProperties.class)
public class MyLogAutoConfiguration {
    @Bean
    public MyLogService demoModule(MyLogProperties properties) {
        MyLogService myLogService = new MyLogService();
        myLogService.setPrefix(properties.getPrefix());
        myLogService.setSuffix(properties.getSuffix());
        return myLogService;
    }
}
  • @Configuration:表明這是SpringBoot中的配置類。
  • @EnableConfigurationProperties:使我們之前定義的Properties生效。
  • @Bean:引入starter時自動注冊的Bean。

五、定義 spring.factory

resources中創(chuàng)建META-INF目錄并創(chuàng)建spring.factories文件。寫入以下內(nèi)容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.jk.mylogspringbootstarter.config.MyLogAutoConfiguration

上面這行內(nèi)容固定,表示自動配置的類路徑,下面需寫我們之前定義的AutoConfiguration的全路徑。

到此我們自定義starter源代碼部分就完成了,整體的代碼結(jié)構(gòu)如下:

六、打包 starter,并在項目中測試

IDEA中通過maven install在進(jìn)行打包

或者通過在命令行中執(zhí)行mvn clear install來進(jìn)行打包,打包后會把這個依賴包安裝到我們本地maven倉庫。

在業(yè)務(wù)項目中:

1. pom中引入對應(yīng)的starter

<dependency>
    <groupId>com.jk</groupId>
    <artifactId>mylog-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

2. 自動裝配在starter中定義的MyLogService

3. 日志打印結(jié)果

可以看到日志的前綴和后綴為之前我們在Properties中定義的默認(rèn)值。

4. 修改日志前綴、后綴配置

通過在業(yè)務(wù)項目中application.yml修改前綴和后綴

測試打印結(jié)果如下:

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

相關(guān)文章

  • Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解

    Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解

    這篇文章主要為大家介紹了Elasticsearch?Analyzer?內(nèi)置分詞器使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 淺談Java多線程編程中Boolean常量的同步問題

    淺談Java多線程編程中Boolean常量的同步問題

    這篇文章主要介紹了淺談Java多線程編程中Boolean常量的同步問題,主要針對線程之間同步了不同的布爾對象的問題,需要的朋友可以參考下
    2015-10-10
  • java 實現(xiàn)websocket的兩種方式實例詳解

    java 實現(xiàn)websocket的兩種方式實例詳解

    這篇文章主要介紹了java 實現(xiàn)websocket的兩種方式實例詳解,一種使用tomcat的websocket實現(xiàn),一種使用spring的websocket,本文通過代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • Java Servlet簡單實例分享(文件上傳下載demo)

    Java Servlet簡單實例分享(文件上傳下載demo)

    下面小編就為大家?guī)硪黄狫ava Servlet簡單實例分享(文件上傳下載demo)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java使用Jdom讀取xml解析實例

    Java使用Jdom讀取xml解析實例

    這篇文章主要介紹了Java使用Jdom讀取xml解析,以實例形式較為詳細(xì)的分析了Jdom操作XML文件實現(xiàn)讀取操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Java深入講解二十三種設(shè)計模式之中的策略模式

    Java深入講解二十三種設(shè)計模式之中的策略模式

    策略模式屬于Java 23種設(shè)計模式中行為模式之一,該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。本文將通過示例詳細(xì)講解這一模式,需要的可以參考一下
    2022-05-05
  • Java數(shù)據(jù)結(jié)構(gòu)之插入排序與希爾排序

    Java數(shù)據(jù)結(jié)構(gòu)之插入排序與希爾排序

    在本篇文章,我們將為小伙伴們進(jìn)行排序概念的基本講解并具體講解其中的兩種基礎(chǔ)排序:插入排序和希爾排序,希望小伙伴們能夠從中有所收獲
    2023-04-04
  • springboot 增加過濾器方法操作示例

    springboot 增加過濾器方法操作示例

    這篇文章主要介紹了springboot 增加過濾器方法操作,結(jié)合實例形式分析了springboot過濾器配置、加載等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • Opencv實現(xiàn)身份證OCR識別的示例詳解

    Opencv實現(xiàn)身份證OCR識別的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Opencv實現(xiàn)身份證OCR識別功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2024-03-03
  • SpringMVC集成FastJson使用流程詳解

    SpringMVC集成FastJson使用流程詳解

    如果你使用 Spring MVC 來構(gòu)建 Web 應(yīng)用并對性能有較高的要求的話,可以使用 Fastjson 提供的FastJsonHttpMessageConverter 來替換 Spring MVC 默認(rèn)的 HttpMessageConverter 以提高 @RestController @ResponseBody @RequestBody 注解的 JSON序列化速度
    2023-02-02

最新評論