SpringBoot 使用 @Configuration 集中管理 Bean的實(shí)戰(zhàn)步驟
在 SpringBoot 中,
@Configuration注解是專門用來集中管理 Bean 的核心方案,它可以替代傳統(tǒng) XML 配置文件,將所有第三方 Bean、自定義 Bean 統(tǒng)一在配置類中創(chuàng)建、管理,實(shí)現(xiàn) Bean 的集中化、模塊化管理。
一、核心概念
@Configuration:標(biāo)記一個(gè)類為配置類,SpringBoot 啟動(dòng)時(shí)會(huì)自動(dòng)掃描并加載這個(gè)類,替代 XML 配置文件。@Bean:寫在配置類的方法上,方法的返回值就是一個(gè) Bean 對(duì)象,方法名默認(rèn)是 Bean 的名稱。- 優(yōu)勢(shì):集中管理所有 Bean、支持依賴注入、支持配置屬性注入、代碼可讀性強(qiáng)、便于維護(hù)。
二、實(shí)戰(zhàn)步驟
1. 基礎(chǔ)環(huán)境
SpringBoot 項(xiàng)目(無需額外依賴,核心容器已包含 @Configuration)
2. 創(chuàng)建統(tǒng)一配置類
創(chuàng)建 config 包,編寫配置類,集中注冊(cè)所有需要的 Bean(自定義對(duì)象、第三方工具類等)。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 全局Bean配置類:集中管理所有Bean對(duì)象
*/
@Configuration // 核心注解:標(biāo)記為配置類
public class GlobalBeanConfig {
// ==================== 1. 管理自定義 Bean ====================
/**
* 創(chuàng)建自定義 UserService Bean(也可以用 @Service 注解,這里演示配置類方式)
* @return Bean 對(duì)象
*/
@Bean // 方法名 userService 就是 Bean 的名稱
public UserService userService() {
return new UserService();
}
// ==================== 2. 管理第三方工具類 Bean ====================
/**
* 注冊(cè)線程池 Bean(第三方類,無法加 @Component,必須用配置類管理)
*/
@Bean
public ExecutorService threadPool() {
return Executors.newFixedThreadPool(5);
}
// ==================== 3. 帶依賴注入的 Bean ====================
/**
* 創(chuàng)建 OrderService Bean,依賴上面的 userService Bean
*/
@Bean
public OrderService orderService(UserService userService) { // 自動(dòng)注入已注冊(cè)的 Bean
OrderService orderService = new OrderService();
// 手動(dòng)注入依賴
orderService.setUserService(userService);
return orderService;
}
}3. 配套的業(yè)務(wù)類(無注解,純Java類)
// 自定義業(yè)務(wù)類(無需加 @Service/@Component,由配置類統(tǒng)一注冊(cè))
public class UserService {
public String getUserInfo() {
return "用戶信息:集中管理的Bean";
}
}
public class OrderService {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public String getOrderInfo() {
return "訂單信息,依賴:" + userService.getUserInfo();
}
}4. 測(cè)試使用集中管理的 Bean
直接通過 @Autowired 注入配置類中注冊(cè)的 Bean 即可使用:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class TestController {
// 注入配置類中創(chuàng)建的 Bean
@Resource
private UserService userService;
@Resource
private OrderService orderService;
@Resource
private ExecutorService threadPool;
@GetMapping("/test")
public String test() {
// 測(cè)試自定義Bean
System.out.println(userService.getUserInfo());
// 測(cè)試依賴注入的Bean
System.out.println(orderService.getOrderInfo());
// 測(cè)試第三方Bean
threadPool.execute(() -> System.out.println("線程池Bean執(zhí)行成功"));
return "Bean 集中管理測(cè)試成功";
}
}三、高級(jí)用法
1. 給 Bean 指定名稱(默認(rèn)是方法名)
@Bean(name = "customUserService") // 指定Bean名稱
public UserService userService() {
return new UserService();
}
注入時(shí)指定名稱:
@Resource(name = "customUserService") private UserService userService;
2. 配置多環(huán)境/模塊化管理Bean
可以拆分多個(gè)配置類,按模塊管理:
DataSourceConfig:管理數(shù)據(jù)庫連接池 BeanThreadPoolConfig:管理線程池 BeanRedisConfig:管理 Redis 模板 Bean
SpringBoot 會(huì)自動(dòng)掃描所有 @Configuration 類。
3. 讀取配置文件注入 Bean
結(jié)合 @Value 讀取 application.yml 配置,動(dòng)態(tài)創(chuàng)建 Bean:
- application.yml
thread: core: 5
- 配置類中注入
import org.springframework.beans.factory.annotation.Value;
@Configuration
public class ThreadPoolConfig {
@Value("${thread.core}")
private Integer corePoolSize;
@Bean
public ExecutorService threadPool() {
return Executors.newFixedThreadPool(corePoolSize);
}
}4. Bean 銷毀方法(資源釋放)
適合線程池、連接池等需要關(guān)閉的 Bean:
@Bean(destroyMethod = "shutdown") // 指定銷毀方法
public ExecutorService threadPool() {
return Executors.newFixedThreadPool(5);
}
四、總結(jié)
@Configuration= 配置文件:專門用于集中、統(tǒng)一管理 Bean,是 SpringBoot 推薦的無 XML 方案。@Bean= 注冊(cè) Bean:方法返回值就是 Spring 容器管理的對(duì)象。- 適用場(chǎng)景:
- 無法直接加
@Component的第三方類(線程池、數(shù)據(jù)源、工具類) - 需要自定義創(chuàng)建邏輯的 Bean
- 需要集中管理所有 Bean,統(tǒng)一維護(hù)
- 無法直接加
- 依賴注入:配置類中方法參數(shù)可以直接注入其他 Bean,Spring 自動(dòng)匹配。
到此這篇關(guān)于SpringBoot 使用 @Configuration 集中管理 Bean的實(shí)戰(zhàn)步驟的文章就介紹到這了,更多相關(guān)SpringBoot @Configuration 管理 Bean內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot整合swagger3報(bào)Unable to infer base&nbs
這篇文章主要介紹了springboot整合swagger3報(bào)Unable to infer base url錯(cuò)誤問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
SpringBoot自定義一個(gè)Starter的完整代碼
文章介紹了SpringBootStarter的開發(fā)流程及核心結(jié)構(gòu),主要包括屬性類綁定配置、提供服務(wù)類、自動(dòng)配置類創(chuàng)建Bean、注冊(cè)自動(dòng)配置類等步驟,同時(shí),還詳細(xì)解釋了Starter的核心依賴、optional作用、與SpringBoot應(yīng)用的區(qū)別等內(nèi)容,需要的朋友可以參考下2026-03-03
Java實(shí)現(xiàn)PPT轉(zhuǎn)多種圖片格式的高效方法
Java PPT轉(zhuǎn)多種圖片格式:打造高質(zhì)量的文檔轉(zhuǎn)換服務(wù) 在現(xiàn)代企業(yè)應(yīng)用中,文檔處理扮演著至關(guān)重要的角色。無論是 Web端的在線預(yù)覽、移動(dòng)端的縮略圖生成、內(nèi)容管理系統(tǒng)的文件歸檔,還是數(shù)據(jù)分析平臺(tái)的數(shù)據(jù)2025-08-08
java Gui實(shí)現(xiàn)肯德基點(diǎn)餐收銀系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java Gui實(shí)現(xiàn)肯德基點(diǎn)餐收銀系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
淺談SpringBoot中的@Conditional注解的使用
這篇文章主要介紹了淺談SpringBoot中的@Conditional注解的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-04-04
SpringBoot獲取HttpServletRequest的3種方式總結(jié)
這篇文章主要給大家介紹了關(guān)于SpringBoot獲取HttpServletRequest的3種方式,在Spring boot項(xiàng)目中經(jīng)常要用到Servlet的常用對(duì)象如HttpServletRequest request,HttpServletResponse response,HttpSession session,需要的朋友可以參考下2023-08-08

