Spring如何使用注解@DependsOn控制Bean加載順序
1. 前言
默認(rèn)情況下,Spring加載Bean的順序是不確定的(或者可以理解為,按編譯后的class文件順序加載)。當(dāng)我們需要控制Bean加載順序以滿足特定的需求時(shí),@DependsOn就派上用場(chǎng)了。
假設(shè)需求場(chǎng)景:
C類加載時(shí)要從緩存讀取數(shù)據(jù),D類加載時(shí)會(huì)初始化緩存數(shù)據(jù)。因此,我們必須控制D類優(yōu)先加載,否則C讀到的緩存會(huì)是空的。

2. 代碼實(shí)現(xiàn)
先驗(yàn)證沒(méi)有加 @DependsOn 的效果
創(chuàng)建緩存類 MyCache
public class MyCache {
private static Map<String, Object> cache = new HashMap<>();
public static Object get(String key){
return cache.get(key);
}
public static void set(String key, Object value){
cache.put(key, value);
}
}創(chuàng)建 C 類,并在構(gòu)造函數(shù)讀取 MyCache:
@Component
public class C {
public C(){
System.out.println("name:" + MyCache.get("name"));
}
}創(chuàng)建 D 類,并在構(gòu)造函數(shù)初始化 MyCache:
@Component
public class D {
public D(){
MyCache.set("name", "fuhb");
}
}啟動(dòng)程序,這時(shí)會(huì)輸出空的數(shù)據(jù):
name:null
這明顯不符合我們的需求,因此修改 C 類,增加 @DependsOn 注解
@Component
@DependsOn(value = { "d" })
public class C {
public C(){
System.out.println("name:" + MyCache.get("name"));
}
}重新啟動(dòng)程序,正常讀取了MyCache的數(shù)據(jù),說(shuō)明D優(yōu)先于C加載
name:fuhb
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)對(duì)map的字典序排序操作示例
這篇文章主要介紹了java實(shí)現(xiàn)對(duì)map的字典序排序操作,結(jié)合實(shí)例形式分析了java參照微信官網(wǎng)算法實(shí)現(xiàn)的字典序排序操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-07-07
Java EasyExcel實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式
EasyExcel是一個(gè)基于Java的、快速、簡(jiǎn)潔、解決大文件內(nèi)存溢出的Excel處理工具,下面我們就來(lái)學(xué)習(xí)一下EasyExcel如何實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式吧2023-11-11
Spring?中?PageHelper?不生效問(wèn)題及解決方法
這篇文章主要介紹了Spring?中?PageHelper?不生效問(wèn)題,使用這個(gè)插件時(shí)要注意版本的問(wèn)題,不同的版本可能 PageHelper 不會(huì)生效,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Java 實(shí)現(xiàn)實(shí)時(shí)監(jiān)聽(tīng)文件夾是否有新文件增加并上傳服務(wù)器功能
本文中主要陳述一種實(shí)時(shí)監(jiān)聽(tīng)文件夾中是否有文件增加的功能,可用于實(shí)際文件上傳功能的開(kāi)發(fā)。本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-09-09
springboot 如何解決cross跨域請(qǐng)求的問(wèn)題
這篇文章主要介紹了springboot 如何解決cross跨域請(qǐng)求的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
Java實(shí)現(xiàn)游戲抽獎(jiǎng)算法
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)游戲抽獎(jiǎng)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
IDEA Maven源修改為國(guó)內(nèi)阿里云鏡像的正確方式
為了加快 Maven 依賴的下載速度,可以將 Maven 的中央倉(cāng)庫(kù)源修改為國(guó)內(nèi)的鏡像,比如阿里云鏡像,以下是如何在 IntelliJ IDEA 中將 Maven 源修改為阿里云鏡像的詳細(xì)步驟,感興趣的同學(xué)可以參考閱讀一下2024-09-09

