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

SpringBoot多模塊項(xiàng)目中優(yōu)雅實(shí)現(xiàn)自動(dòng)配置的完整指南

 更新時(shí)間:2026年02月07日 09:08:08   作者:Knight_AL  
在 Spring Boot 開(kāi)發(fā)中,自動(dòng)配置 是一個(gè)繞不開(kāi)的核心能力,本文將結(jié)合一個(gè) RabbitService 自動(dòng)配置的示例,完整講解如何在 Spring Boot 多模塊項(xiàng)目中實(shí)現(xiàn)自動(dòng)配置,希望對(duì)大家有所幫助

在 Spring Boot 開(kāi)發(fā)中,自動(dòng)配置(Auto Configuration) 是一個(gè)繞不開(kāi)的核心能力。它極大地降低了項(xiàng)目的配置成本,讓開(kāi)發(fā)者可以“約定優(yōu)于配置”,專(zhuān)注于業(yè)務(wù)邏輯。

多模塊項(xiàng)目 中,我們往往會(huì)遇到這樣一個(gè)需求:

  • 希望把一些通用能力(如消息、緩存、工具類(lèi)等)抽取到公共模塊中
  • 其他業(yè)務(wù)模塊只需 引入依賴(lài)即可直接使用,而不需要額外 @Import 或手動(dòng)配置

本文將結(jié)合一個(gè) RabbitService 自動(dòng)配置的示例,完整講解如何在 Spring Boot 多模塊項(xiàng)目中實(shí)現(xiàn)自動(dòng)配置,以及如何通過(guò)META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports來(lái)注冊(cè)自動(dòng)配置類(lèi)。

一、什么是 Spring Boot 自動(dòng)配置

自動(dòng)配置是 Spring Boot 的核心特性之一。

簡(jiǎn)單來(lái)說(shuō)就是:

Spring Boot 會(huì)根據(jù) 當(dāng)前 classpath 中的依賴(lài),自動(dòng)判斷并注冊(cè)合適的 Bean 到 Spring 容器中。

自動(dòng)配置通常具備以下特征:

  • 使用 @Configuration 聲明為配置類(lèi)
  • 配合 @ConditionalOnClass、@ConditionalOnProperty 等條件注解
  • 只在“合適的條件下”才生效

這也是 Spring Boot 能做到 “零 XML、少配置” 的根本原因。

二、為什么多模塊項(xiàng)目需要自動(dòng)配置

在多模塊項(xiàng)目中,如果沒(méi)有自動(dòng)配置,通常會(huì)出現(xiàn)這些問(wèn)題:

公共模塊寫(xiě)好了 Bean

每個(gè)業(yè)務(wù)模塊都要:

  • 手動(dòng) @Import
  • 或掃描指定包

配置分散、侵入性強(qiáng)

可維護(hù)性差

自動(dòng)配置的目標(biāo) 是:

  • 公共模塊只負(fù)責(zé)“提供能力”
  • 業(yè)務(wù)模塊只需引入依賴(lài)即可使用

這正是 Spring Boot 官方推薦的做法。

三、使用 AutoConfiguration.imports 注冊(cè)自動(dòng)配置類(lèi)

Spring Boot 2.7 / 3.x 開(kāi)始,官方推薦使用:

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

來(lái)替代早期的 spring.factories。

下面通過(guò)一個(gè)完整示例說(shuō)明。

四、示例:封裝 RabbitService 自動(dòng)配置模塊

定義業(yè)務(wù)類(lèi)(RabbitService)

package com.sky.common.rabbit.service;

public class RabbitService {

    public void sendMessage(String exchange, String routingKey, Object message) {
        System.out.println(
            "Message sent to exchange: " + exchange +
            ", routingKey: " + routingKey +
            ", message: " + message
        );
    }
}

這是一個(gè)普通的業(yè)務(wù)類(lèi),本身不依賴(lài) Spring。

編寫(xiě)自動(dòng)配置類(lèi)

package com.sky.common.rabbit.config;

import com.sky.common.rabbit.service.RabbitService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

@Configuration
public class RabbitServiceAutoConfiguration {

    @Bean
    @ConditionalOnProperty(
        prefix = "sky.security",
        name = "enabled",
        havingValue = "true",
        matchIfMissing = true
    )
    public RabbitService rabbitService() {
        return new RabbitService();
    }
}

這里有幾個(gè)關(guān)鍵點(diǎn):

  • 使用 @Configuration 聲明配置類(lèi)
  • 使用 @Bean 注冊(cè) RabbitService
  • 使用 @ConditionalOnProperty 控制是否生效

五、注冊(cè)自動(dòng)配置類(lèi)(核心步驟)

公共模塊(module-a) 中創(chuàng)建文件:

src/main/resources/
└── META-INF
    └── spring
        └── org.springframework.boot.autoconfigure.AutoConfiguration.imports

內(nèi)容如下:

com.sky.common.rabbit.config.RabbitServiceAutoConfiguration

這一行配置非常關(guān)鍵

它告訴 Spring Boot:?jiǎn)?dòng)時(shí)請(qǐng)自動(dòng)加載這個(gè)配置類(lèi)

只要該模塊被引入,Spring Boot 就會(huì)自動(dòng)生效。

六、業(yè)務(wù)模塊中如何使用

module-b 中,只需要引入依賴(lài):

<dependency>
    <groupId>com.sky.common</groupId>
    <artifactId>rabbit</artifactId>
</dependency>

不需要任何額外配置。

直接使用即可:

@RestController
@RequestMapping("/api")
public class Controller {

    @Autowired
    private RabbitService rabbitService;

    @RequestMapping("/send")
    public String sendMessage() {
        rabbitService.sendMessage(
            "donglin",
            "routingKey",
            "Hello, RabbitMQ!"
        );
        return "Message sent!";
    }
}

這就是自動(dòng)配置的魅力:引入即用

七、為什么不一定要使用 @AutoConfiguration?

很多教程會(huì)提到 @AutoConfiguration,但這里要強(qiáng)調(diào)一個(gè)關(guān)鍵點(diǎn):

只要配置類(lèi)被寫(xiě)進(jìn) AutoConfiguration.imports 文件,即使沒(méi)有 @AutoConfiguration 注解,也會(huì)被當(dāng)作自動(dòng)配置加載

也就是說(shuō),下面的寫(xiě)法是 完全合法且有效的

@Configuration
public class RabbitServiceAutoConfiguration {

    @Bean
    @ConditionalOnProperty(
        prefix = "sky.security",
        name = "enabled",
        havingValue = "true",
        matchIfMissing = true
    )
    public RabbitService rabbitService() {
        return new RabbitService();
    }
}

AutoConfiguration.imports 才是“是否自動(dòng)加載”的決定因素

八、@ConditionalOnProperty 的實(shí)際作用

@ConditionalOnProperty(
    prefix = "sky.security",
    name = "enabled",
    havingValue = "true",
    matchIfMissing = true
)

含義解釋?zhuān)?/p>

  • sky.security.enabled=true → Bean 生效
  • sky.security.enabled=false → Bean 不加載
  • 配置不存在 → 默認(rèn)加載(matchIfMissing=true

application.yml 中控制即可:

sky:
  security:
    enabled: true

這使得公共模塊既 開(kāi)箱即用,又 可靈活關(guān)閉

九、總結(jié)

在 Spring Boot 多模塊項(xiàng)目中,使用AutoConfiguration.imports實(shí)現(xiàn)自動(dòng)配置,是一種 官方推薦、優(yōu)雅、可維護(hù) 的方式。

關(guān)鍵要點(diǎn)回顧:

  • 公共模塊中定義 @Configuration 配置類(lèi)
  • 使用條件注解控制 Bean 是否生效
  • AutoConfiguration.imports 中注冊(cè)配置類(lèi)
  • 業(yè)務(wù)模塊只需引入依賴(lài)即可使用
  • 不強(qiáng)制要求 @AutoConfiguration 注解

這種方式非常適合:

  • 基礎(chǔ)組件模塊
  • 通用能力封裝
  • 中臺(tái) / 平臺(tái)型項(xiàng)目

到此這篇關(guān)于SpringBoot多模塊項(xiàng)目中優(yōu)雅實(shí)現(xiàn)自動(dòng)配置的完整指南的文章就介紹到這了,更多相關(guān)SpringBoot多模塊配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA新建springboot項(xiàng)目時(shí)未生成pom.xml文件的解決操作

    IDEA新建springboot項(xiàng)目時(shí)未生成pom.xml文件的解決操作

    這篇文章主要給大家介紹了關(guān)于IDEA新建springboot項(xiàng)目時(shí)未生成pom.xml文件的解決操作方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Spring?Data?Elasticsearch使用方式(Elasticsearch)

    Spring?Data?Elasticsearch使用方式(Elasticsearch)

    這篇文章主要介紹了Spring?Data?Elasticsearch使用方式(Elasticsearch),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • java?zip文件解壓后無(wú)法刪除原zip文件問(wèn)題

    java?zip文件解壓后無(wú)法刪除原zip文件問(wèn)題

    這篇文章主要介紹了java?zip文件解壓后無(wú)法刪除原zip文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java編程技巧:if-else優(yōu)化實(shí)踐總結(jié)歸納

    Java編程技巧:if-else優(yōu)化實(shí)踐總結(jié)歸納

    這篇文章主要介紹了Java中避免過(guò)多if-else的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2021-06-06
  • Maven 打包項(xiàng)目到私服 (deploy)的配置方法

    Maven 打包項(xiàng)目到私服 (deploy)的配置方法

    這篇文章主要介紹了Maven 打包項(xiàng)目到私服 (deploy)的配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 詳解spring boot starter redis配置文件

    詳解spring boot starter redis配置文件

    spring-boot-starter-Redis主要是通過(guò)配置RedisConnectionFactory中的相關(guān)參數(shù)去實(shí)現(xiàn)連接redis service。下面通過(guò)本文給大家介紹在spring boot的配置文件中redis的基本配置,需要的的朋友參考下
    2017-07-07
  • springboot多模塊包掃描問(wèn)題的解決方法

    springboot多模塊包掃描問(wèn)題的解決方法

    這篇文章主要介紹了springboot多模塊包掃描問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 從源碼角度簡(jiǎn)單看StringBuilder和StringBuffer的異同(全面解析)

    從源碼角度簡(jiǎn)單看StringBuilder和StringBuffer的異同(全面解析)

    下面小編就為大家分享一篇從源碼角度簡(jiǎn)單看StringBuilder和StringBuffer的異同(全面解析),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java實(shí)現(xiàn)字符串匹配的示例代碼

    Java實(shí)現(xiàn)字符串匹配的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)字符串匹配,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)

    Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)

    下面小編就為大家?guī)?lái)一篇Java內(nèi)存各部分OOM出現(xiàn)原因及解決方法(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04

最新評(píng)論

天气| 庆安县| 兴和县| 霍林郭勒市| 阿拉善左旗| 桃园市| 永定县| 普兰店市| 西平县| 武邑县| 西充县| 伊宁县| 文山县| SHOW| 防城港市| 安平县| 仁怀市| 长沙县| 长白| 余干县| 贡嘎县| 安龙县| 习水县| 白银市| 宜川县| 泽普县| 嘉兴市| 荥阳市| 汾西县| 石家庄市| 文成县| 鄂尔多斯市| 上犹县| 日喀则市| 临澧县| 全南县| 武山县| 淮南市| 墨竹工卡县| 四川省| 邯郸市|