Spring最核心的注解@Bean本質(zhì)用法及說明
Spring 最核心的注解@Bean本質(zhì)
直接給你一句話戳穿本質(zhì),馬上徹底懂
答案:
這個(gè)方法本身不是 Bean,方法執(zhí)行后返回的對象才是 Bean!
Spring 會把這個(gè)返回的對象放進(jìn)容器里管理!
用最通俗的話講@Bean原理
看這段代碼:
@Configuration // 配置類
public class MesaageConfig {
// 加了 @Bean 的方法
@Bean
public MessageConverter messageConverter() {
// 1. 自己 new 對象
Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
// 2. 自己配置對象
converter.setCreateMessageIds(true);
// 3. 返回對象
return converter;
}
}
Spring 看到@Bean會做什么?
Spring 會自動調(diào)用這個(gè)方法,拿到返回值,然后:
- 把返回的對象放進(jìn) Spring 容器
- 給這個(gè) Bean 起名 = 方法名 messageConverter
- 以后別人想用,直接注入就行
總結(jié):
@Bean = 告訴 Spring:執(zhí)行我這個(gè)方法,把返回的對象給我當(dāng)成 Bean 管理!
- 方法 = 造 Bean 的工廠
- 返回值 = 真正的 Bean
問:它不是方法嗎?怎么成 Bean 了?
畫個(gè)等號你就懂了:
@Bean
public 消息 造消息的方法() {
造一個(gè)消息...
return 消息; // Spring 拿走這個(gè)「消息」當(dāng) Bean
}
- 方法:只是生產(chǎn) Bean 的流水線
- 返回的對象:才是商品(Bean)
@Bean:就是貼在流水線上的標(biāo)簽,告訴 Spring 來拿貨
這個(gè) Bean 怎么用?
其他類里直接注入就能用:
@Service
public class MessageService {
// 直接注入!Spring 自動把上面方法返回的對象給你
@Autowired
private MessageConverter messageConverter;
}
@Bean和 類注解(@Service/@Component)區(qū)別
| 方式 | 注解 | 適用場景 |
|---|---|---|
| 自己寫的類 | @Service @Component | 類是你寫的,直接加注解 |
| 別人寫的類(Jackson、RabbitTemplate…) | @Bean | 類不是你寫的,你需要new 出來 + 配置,交給 Spring |
你的場景:
Jackson2JsonMessageConverter 是別人寫的類,你需要:
new出來- 配置
setCreateMessageIds(true) - 交給 Spring
→ 必須用 @Bean!
終極總結(jié)(背下來)
- 加了
@Bean的方法 = Spring 會自動調(diào)用 - 方法的返回值 = 放進(jìn)容器的 Bean 對象
- 方法名 = Bean 的名字
- 別人可以直接注入使用
最直白的一句:
你寫的是方法,但 Spring 要的是你方法 return 出來的那個(gè)對象!
再給你對應(yīng)一下:
@Configuration:造 Bean 的工廠類@Bean:工廠里的加工方法return xxx:加工好的產(chǎn)品 → Bean
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue計(jì)算屬性computed和監(jiān)聽屬性watch的使用解讀
本文介紹了Vue.js中的計(jì)算屬性(computed)和監(jiān)聽屬性(watch)的區(qū)別和使用場景,計(jì)算屬性是基于依賴緩存的,只有在相關(guān)依賴發(fā)生改變時(shí)才會重新求值,適合用于簡單的數(shù)據(jù)處理和計(jì)算,而監(jiān)聽屬性則用于監(jiān)聽數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作,適合用于處理復(fù)雜的數(shù)據(jù)邏輯2025-12-12
最新hadoop安裝教程及hadoop的命令使用(親測可用)
這篇文章主要介紹了最新hadoop安裝教程(親測可用),本文主要講解了如何安裝hadoop、使用hadoop的命令及遇到的問題解決,需要的朋友可以參考下2022-06-06
SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源)
本文主要介紹了SpringBoot-JWT生成Token和攔截器的使用(訪問受限資源),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
Java實(shí)現(xiàn)生成自定義時(shí)長的靜音音頻
這篇文章主要介紹了如何通過Java實(shí)現(xiàn)一個(gè)音頻工具類,可以實(shí)現(xiàn)生成一段自定義時(shí)長(精確到毫秒)的wav音頻。感興趣的小伙伴可以了解一下2022-01-01
Elasticsearch索引結(jié)構(gòu)與算法解析
?作為搜索引擎的一部分,ES自然具有速度快、結(jié)果準(zhǔn)確、結(jié)果豐富等特點(diǎn),那么ES是如何達(dá)到“搜索引擎”級別的查詢效率呢?首先是索引,其次是壓縮算法,接下來我們就一起了解下ES的索引結(jié)構(gòu)和壓縮算法2023-04-04

