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

2. 代碼實(shí)現(xiàn)
先驗(yà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");
}
}啟動(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ù),說明D優(yōu)先于C加載
name:fuhb
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java之MyBatis的Dao方式以及Dao動(dòng)態(tài)代理詳解
這篇文章主要介紹了Java之MyBatis的Dao方式以及Dao動(dòng)態(tài)代理詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
eclipse創(chuàng)建springboot項(xiàng)目的三種方式總結(jié)
這篇文章主要介紹了eclipse創(chuàng)建springboot項(xiàng)目的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
關(guān)于Java實(shí)體類Serializable序列化接口的作用和必要性解析
序列化是將對(duì)象狀態(tài)轉(zhuǎn)化為可保持或者傳輸?shù)母袷竭^程,與序列化相反的是反序列化,完成序列化和反序列化,可以存儲(chǔ)或傳輸數(shù)據(jù),一般情況下,在定義實(shí)體類時(shí)會(huì)使用Serializable,需要的朋友可以參考下2023-05-05
spring boot前后端傳參的實(shí)現(xiàn)
這篇文章主要介紹了spring boot前后端傳參的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
解決grails服務(wù)端口沖突的辦法(grails修改端口號(hào))
grails中默認(rèn)的服務(wù)端口為8080,當(dāng)本機(jī)中需要同時(shí)啟動(dòng)兩個(gè)不同的項(xiàng)目時(shí),就會(huì)造成端口沖突,下面給出解決方法2013-12-12
詳解Spring Batch 輕量級(jí)批處理框架實(shí)踐
這篇文章主要介紹了詳解Spring Batch 輕量級(jí)批處理框架實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06

