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. 代碼實現(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 EasyExcel實現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式
EasyExcel是一個基于Java的、快速、簡潔、解決大文件內(nèi)存溢出的Excel處理工具,下面我們就來學(xué)習(xí)一下EasyExcel如何實現(xiàn)導(dǎo)出多sheet并設(shè)置單元格樣式吧2023-11-11Spring?中?PageHelper?不生效問題及解決方法
這篇文章主要介紹了Spring?中?PageHelper?不生效問題,使用這個插件時要注意版本的問題,不同的版本可能 PageHelper 不會生效,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12Java 實現(xiàn)實時監(jiān)聽文件夾是否有新文件增加并上傳服務(wù)器功能
本文中主要陳述一種實時監(jiān)聽文件夾中是否有文件增加的功能,可用于實際文件上傳功能的開發(fā)。本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧2019-09-09IDEA Maven源修改為國內(nèi)阿里云鏡像的正確方式
為了加快 Maven 依賴的下載速度,可以將 Maven 的中央倉庫源修改為國內(nèi)的鏡像,比如阿里云鏡像,以下是如何在 IntelliJ IDEA 中將 Maven 源修改為阿里云鏡像的詳細(xì)步驟,感興趣的同學(xué)可以參考閱讀一下2024-09-09