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

2. 代碼實(shí)現(xiàn)
先驗證沒有加 @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");
}
}啟動程序,這時會輸出空的數(shù)據(jù):
name:null
這明顯不符合我們的需求,因此修改 C 類,增加 @DependsOn 注解
@Component
@DependsOn(value = { "d" })
public class C {
public C(){
System.out.println("name:" + MyCache.get("name"));
}
}重新啟動程序,正常讀取了MyCache的數(shù)據(jù),說明D優(yōu)先于C加載
name:fuhb
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)對map的字典序排序操作示例
這篇文章主要介紹了java實(shí)現(xiàn)對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是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具,下面我們就來學(xué)習(xí)一下EasyExcel如何實(shí)現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式吧2023-11-11
Spring?中?PageHelper?不生效問題及解決方法
這篇文章主要介紹了Spring?中?PageHelper?不生效問題,使用這個插件時要注意版本的問題,不同的版本可能 PageHelper 不會生效,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Java 實(shí)現(xiàn)實(shí)時監(jiān)聽文件夾是否有新文件增加并上傳服務(wù)器功能
本文中主要陳述一種實(shí)時監(jiān)聽文件夾中是否有文件增加的功能,可用于實(shí)際文件上傳功能的開發(fā)。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧2019-09-09
IDEA Maven源修改為國內(nèi)阿里云鏡像的正確方式
為了加快 Maven 依賴的下載速度,可以將 Maven 的中央倉庫源修改為國內(nèi)的鏡像,比如阿里云鏡像,以下是如何在 IntelliJ IDEA 中將 Maven 源修改為阿里云鏡像的詳細(xì)步驟,感興趣的同學(xué)可以參考閱讀一下2024-09-09

