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

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

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

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

多模塊項目 中,我們往往會遇到這樣一個需求:

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

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

一、什么是 Spring Boot 自動配置

自動配置是 Spring Boot 的核心特性之一。

簡單來說就是:

Spring Boot 會根據(jù) 當前 classpath 中的依賴,自動判斷并注冊合適的 Bean 到 Spring 容器中。

自動配置通常具備以下特征:

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

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

二、為什么多模塊項目需要自動配置

在多模塊項目中,如果沒有自動配置,通常會出現(xiàn)這些問題:

公共模塊寫好了 Bean

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

  • 手動 @Import
  • 或掃描指定包

配置分散、侵入性強

可維護性差

自動配置的目標 是:

  • 公共模塊只負責“提供能力”
  • 業(yè)務模塊只需引入依賴即可使用

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

三、使用 AutoConfiguration.imports 注冊自動配置類

Spring Boot 2.7 / 3.x 開始,官方推薦使用:

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

來替代早期的 spring.factories。

下面通過一個完整示例說明。

四、示例:封裝 RabbitService 自動配置模塊

定義業(yè)務類(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
        );
    }
}

這是一個普通的業(yè)務類,本身不依賴 Spring。

編寫自動配置類

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();
    }
}

這里有幾個關鍵點:

  • 使用 @Configuration 聲明配置類
  • 使用 @Bean 注冊 RabbitService
  • 使用 @ConditionalOnProperty 控制是否生效

五、注冊自動配置類(核心步驟)

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

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

內(nèi)容如下:

com.sky.common.rabbit.config.RabbitServiceAutoConfiguration

這一行配置非常關鍵

它告訴 Spring Boot:啟動時請自動加載這個配置類

只要該模塊被引入,Spring Boot 就會自動生效。

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

module-b 中,只需要引入依賴:

<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!";
    }
}

這就是自動配置的魅力:引入即用

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

很多教程會提到 @AutoConfiguration,但這里要強調(diào)一個關鍵點:

只要配置類被寫進 AutoConfiguration.imports 文件,即使沒有 @AutoConfiguration 注解,也會被當作自動配置加載

也就是說,下面的寫法是 完全合法且有效的

@Configuration
public class RabbitServiceAutoConfiguration {

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

AutoConfiguration.imports 才是“是否自動加載”的決定因素

八、@ConditionalOnProperty 的實際作用

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

含義解釋:

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

application.yml 中控制即可:

sky:
  security:
    enabled: true

這使得公共模塊既 開箱即用,又 可靈活關閉。

九、總結

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

關鍵要點回顧:

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

這種方式非常適合:

  • 基礎組件模塊
  • 通用能力封裝
  • 中臺 / 平臺型項目

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

相關文章

  • IDEA新建springboot項目時未生成pom.xml文件的解決操作

    IDEA新建springboot項目時未生成pom.xml文件的解決操作

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

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

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

    java?zip文件解壓后無法刪除原zip文件問題

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

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

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

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

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

    詳解spring boot starter redis配置文件

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

    springboot多模塊包掃描問題的解決方法

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

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

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

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

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

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

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

最新評論

启东市| 新余市| 乌鲁木齐市| 二手房| 广州市| 乡宁县| 泸水县| 安庆市| 合阳县| 信阳市| 阳高县| 繁昌县| 靖安县| 泾阳县| 景谷| 曲水县| 休宁县| 乐陵市| 贵阳市| 株洲市| 维西| 雷山县| 惠来县| 云龙县| 广饶县| 博野县| 汉阴县| 湟源县| 会东县| 沭阳县| 龙里县| 奉贤区| 万山特区| 滁州市| 浏阳市| 特克斯县| 花垣县| 雅江县| 麻阳| 界首市| 德昌县|