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

springboot自定義starter示例代碼

 更新時(shí)間:2024年11月07日 16:40:48   作者:阿勝yss  
SpringBoot自定義Starter項(xiàng)目的命名建議遵循xxx-spring-boot-starter格式,以避免與官方或第三方Starter產(chǎn)生沖突,核心規(guī)范包括自動(dòng)裝配文件的配置,旨在通過(guò)spring.factories或spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

springboot 約定規(guī)范

Starter項(xiàng)目的命名規(guī)范

建議自定義的starter 以 xxx-spring-boot-starter 命名,官方的Starter一般都是以spring-boot-starter-為前綴。

這樣做的目的是為了避免與官方或其他第三方提供的Starter產(chǎn)生沖突或混淆。

Starter項(xiàng)目的結(jié)構(gòu)規(guī)范(重要)

最核心的是 Spring Boot自動(dòng)裝配文件

作用: 用來(lái)指定我們的自動(dòng)配置類,讓Spring Boot能夠在啟動(dòng)時(shí)自動(dòng)掃描并加載它。

名稱必須為 spring.factories

路徑必須為resources/META-INF/spring.factories 這是springboot的約定規(guī)范,不遵守一律失效。

  • 1、在spring boot2.7版本之前:

通過(guò)META-INF/spring.factories文件定義我們自動(dòng)配置的類。

  • 2、在spring boot2.7~spring boot3.0版本之間,是兼容了

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 和META-INF/spring.factories 這兩個(gè)文件的。

  • 3、在spring boot3.0版本之后,只支持使用

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports來(lái)自定義我們的自動(dòng)配置的類。

注意!!!:springboot 2.7 版本有所變化,具體請(qǐng)查看springboot官網(wǎng)。

  • hello-spring-boot-starter

pom.xml

依賴說(shuō)明

  • spring-boot-configuration-processor : 編譯時(shí)依賴 可以幫助我們生成屬性類和配置元數(shù)據(jù),并且設(shè)置為可選依賴,避免傳遞給其他項(xiàng)目。
  • spring-boot-starter : 基礎(chǔ)依賴 提供了Spring Boot核心功能和默認(rèn)配置
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 用戶依賴必須指定的參數(shù) -->
    <groupId>org.example</groupId>
    <artifactId>hello-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <!--        jdk版本-->
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- 基礎(chǔ)依賴  提供了Spring Boot核心功能和默認(rèn)配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.18</version>
        </dependency>
        <!-- 編譯時(shí)依賴 可以幫助我們生成屬性類和配置元數(shù)據(jù),并且設(shè)置為可選依賴,避免傳遞給其他項(xiàng)目。-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.7.18</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

Starter項(xiàng)目的屬性類

在創(chuàng)建一個(gè)自定義的Starter項(xiàng)目時(shí),我們需要編寫(xiě)一個(gè)屬性類,用來(lái)定義我們要集成的功能模塊所需的配置項(xiàng),并且使用@ConfigurationProperties注解來(lái)指定用戶配置文件中的前綴。

package com.hello.starter.properties;

/**
 *  * 描述:配置信息 實(shí)體
 * @author yss
 * @date 2024/5/1
 */
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "demo") // 指定 用戶配置文件中的前綴
public class DemoProperties {
    private String sayWhat;
    private String toWho;

    public String getSayWhat() {
        return sayWhat;
    }

    public void setSayWhat(String sayWhat) {
        this.sayWhat = sayWhat;
    }

    public String getToWho() {
        return toWho;
    }

    public void setToWho(String toWho) {
        this.toWho = toWho;
    }
}

Starter項(xiàng)目的業(yè)務(wù)功能類

在創(chuàng)建一個(gè)自定義的Starter項(xiàng)目時(shí),我們需要編寫(xiě)一個(gè)或多個(gè)業(yè)務(wù)功能類,用來(lái)實(shí)現(xiàn)我們要集成的功能模塊的具體邏輯。

package com.hello.starter.service;

/**
 * @author yss
 * @date 2024/5/1
 */
public class DemoService {
    public String sayWhat;
    public String toWho;
    public DemoService(String sayWhat, String toWho){
        this.sayWhat = sayWhat;
        this.toWho = toWho;
    }
    public String say(){
        return this.sayWhat + "!  " + toWho;
    }
}

Starter項(xiàng)目的自動(dòng)配置類(重要)

在創(chuàng)建一個(gè)自定義的Starter項(xiàng)目時(shí),我們需要編寫(xiě)一個(gè)自動(dòng)配置類,用來(lái)根據(jù)屬性類和業(yè)務(wù)功能類,創(chuàng)建相應(yīng)的Bean對(duì)象。Springboot自動(dòng)配置原理源碼解讀

  • @EnableConfigurationProperties : 啟用屬性類,并將其注入到配置類中。
  • @ConditionalOnProperty: 判斷用戶配置文件中是否有相應(yīng)的配置項(xiàng),存在并且符合期望則滿足條件
  • @Configuration : 標(biāo)識(shí)這是一個(gè)配置類,用來(lái)創(chuàng)建和注冊(cè)Bean對(duì)象。
  • @Bean: 根據(jù)屬性類和業(yè)務(wù)功能類,創(chuàng)建相應(yīng)類型的Bean對(duì)象,并注冊(cè)到應(yīng)用上下文中。
  • @ConditionalOnClass: 判斷業(yè)務(wù)功能類是否存在
package com.hello.starter.config;

import com.hello.starter.properties.DemoProperties;
import com.hello.starter.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author yss
 * @date 2024/5/1
 */
@Configuration // 標(biāo)識(shí)這是一個(gè)配置類,用來(lái)創(chuàng)建和注冊(cè)Bean對(duì)象。
//啟用屬性類,并將其注入到配置類中。
@EnableConfigurationProperties(DemoProperties.class) 
// 判斷業(yè)務(wù)功能類是否存在
@ConditionalOnClass(DemoService.class)
// 判斷用戶配置文件中是否存在指定的屬性(isopen),
// 如果存在并且值與期望相符, 則滿足條件(開(kāi)啟相應(yīng)功能)。
@ConditionalOnProperty(
        prefix = "demo",
        name = "isopen",
        havingValue = "true"
)  
public class DemoConfig {
    @Autowired
    private DemoProperties demoProperties;
    
	// 根據(jù)屬性類和業(yè)務(wù)功能類,創(chuàng)建相應(yīng)類型的Bean對(duì)象,并注冊(cè)到應(yīng)用上下文中。
    @Bean(name = "demo")  
    public DemoService demoService(){
        return new DemoService(demoProperties.getSayWhat(), 
        demoProperties.getToWho());
    }
}

Starter項(xiàng)目的自動(dòng)裝配文件(重要)

在resources/META-INF目錄下創(chuàng)建一個(gè)名為spring.factories的文件,用來(lái)指定我們的自動(dòng)配置類,讓Spring Boot能夠在啟動(dòng)時(shí)自動(dòng)掃描并加載它。

以下是一個(gè)示例:

#-------starter自動(dòng)裝配---------
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hello.starter.config.DemoConfig

打包發(fā)布

執(zhí)行 mvn clean install 命令 一個(gè)自定義的starter就完成了。

做完上面這幾步,我們自定義Starter就完成了,下面我們來(lái)測(cè)試一下

引入依賴

在我們需要的項(xiàng)目中引入依賴。

<!--        自定義Starter-->
<dependency>
    <groupId>org.example</groupId>
    <artifactId>hello-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

  • application.yml
demo:
  # 允許 demo作為bean注入IOC容器  一定要指明 isopen  不然項(xiàng)目無(wú)法啟動(dòng)
  isopen: true
  say-what: hello
  to-who: shf
  • DemoController.java
package com.example.testStarter;

import com.hello.starter.service.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author yss
 * @date 2024/5/1
 */
@RestController
public class DemoController {

    @Resource(name = "demo")
    private DemoService demoService;

    @RequestMapping("/say")
    public String sayWhat(){
        return demoService.say();
    }
}

啟動(dòng)項(xiàng)目并且運(yùn)行

ok了!!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring的DI依賴注入詳解

    Spring的DI依賴注入詳解

    這篇文章主要為大家介紹了Spring的DI依賴注入,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 如何利用Java?AWT?創(chuàng)建一個(gè)簡(jiǎn)易計(jì)算器

    如何利用Java?AWT?創(chuàng)建一個(gè)簡(jiǎn)易計(jì)算器

    這篇文章主要介紹了如何利用Java?AWT?創(chuàng)建一個(gè)簡(jiǎn)易計(jì)算器,AWT?是一個(gè)有助于構(gòu)建?GUI?的?API?基于?java?應(yīng)用程序,下面關(guān)于其相關(guān)資料實(shí)現(xiàn)計(jì)算器的內(nèi)容詳細(xì),需要的朋友可以參考一下
    2022-03-03
  • springboot切換使用undertow容器的方式

    springboot切換使用undertow容器的方式

    最近稍微有點(diǎn)空閑,回頭再來(lái)優(yōu)化下基礎(chǔ)框架,也是一種重新學(xué)習(xí)。今天主要寫(xiě)寫(xiě)跟大家分享下springboot使用undertow,廢話不多說(shuō)
    2022-07-07
  • java maven進(jìn)階教學(xué)

    java maven進(jìn)階教學(xué)

    這篇文章主要介紹了Maven進(jìn)階教程的相關(guān)資料,文中講解非常細(xì)致,幫助大家開(kāi)始學(xué)習(xí)maven,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-08-08
  • Java中的== 和equals()方法詳解與實(shí)例

    Java中的== 和equals()方法詳解與實(shí)例

    本篇文章介紹了,在java中"==" 與equals方法的使用及其實(shí)例,需要的朋友可以參考下
    2017-04-04
  • Java中try catch的使用和如何拋出異常問(wèn)題

    Java中try catch的使用和如何拋出異常問(wèn)題

    這篇文章主要介紹了Java中try catch的使用和如何拋出異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解springboot整合ueditor踩過(guò)的坑

    詳解springboot整合ueditor踩過(guò)的坑

    這篇文章主要介紹了詳解springboot整合ueditor踩過(guò)的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • LeetCode程序員面試題之遞歸乘法

    LeetCode程序員面試題之遞歸乘法

    在Java中,遞歸乘法是一種簡(jiǎn)單而有效的方法,可以用來(lái)計(jì)算兩個(gè)數(shù)字的乘積。它的基本思想是:如果第一個(gè)數(shù)字是0,則乘積為0;如果第一個(gè)數(shù)字是1,則乘積為第二個(gè)數(shù)字;其他情況,則通過(guò)將第一個(gè)數(shù)字減1,并將第二個(gè)數(shù)字與自身相乘,來(lái)實(shí)現(xiàn)遞歸乘法。
    2023-02-02
  • 通過(guò)prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)的操作流程

    通過(guò)prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)的操作流程

    jmx_exporter用于從Java應(yīng)用程序中提取JMX指標(biāo),適用于SpringBoot應(yīng)用,通過(guò)下載jar包和配置文件,可以抓取JVM基礎(chǔ)指標(biāo),要獲取應(yīng)用級(jí)別指標(biāo),需要集成Prometheus客戶端庫(kù)并自定義指標(biāo),本文給大家介紹了如何通過(guò)prometheus監(jiān)控springboot程序運(yùn)行狀態(tài)
    2025-02-02
  • SpringBoot 攔截器妙用你真的了解嗎

    SpringBoot 攔截器妙用你真的了解嗎

    關(guān)于springboot攔截器很多朋友掌握的不是多好,今天抽空給大家普及下這方面的知識(shí),SpringBoot 攔截器妙用,讓你一個(gè)人開(kāi)發(fā)整個(gè)系統(tǒng)的鑒權(quán)模塊,快來(lái)跟小編一起學(xué)習(xí)下吧
    2021-07-07

最新評(píng)論

乌鲁木齐市| 嵩明县| 滦平县| 甘孜县| 青阳县| 资源县| 宝兴县| 政和县| 如皋市| 临洮县| 澄江县| 吉木萨尔县| 扎兰屯市| 松江区| 玉溪市| 米脂县| 郑州市| 岳池县| 武威市| 海宁市| 大丰市| 甘德县| 股票| 天水市| 津南区| 双牌县| 巢湖市| 屏东市| 沐川县| 贵南县| 淮阳县| 久治县| 兰溪市| 祥云县| 星座| 淳安县| 清新县| 屯留县| 都匀市| 额尔古纳市| 江安县|