java 靜態代碼塊和spring @value等注解注入順序


java 靜態代碼塊和spring @value等注解注入順序

關於實例變量與構造方法的初始化順序問題
Java類會先執行構造方法,然后再給注解了@Value 的屬性注入值,所以在執行靜態代碼塊的時候,就會為null。
Java 及Spring 初始化順序:java靜態屬性/靜態代碼塊(根據聲明的先后順序加載)、構造代碼塊、 構造方法(即:spring創建FetchStockSchedule的實例 交給Spring 管理)、@Value/@ AutoWired/@Resouce 等注解 的成員變量等賦值。

 

 

解決方案
首先,讓當前類變成Spring的bean,
再使用@PostConstruct

原理
Java中該注解的說明:
@PostConstruct該注解被用來修飾一個非靜態的void()方法。被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,並且只會被服務器執行一次。PostConstruct在構造函數之后執行,init()方法之前執行。

通常我們會是在Spring框架中使用到@PostConstruct注解 該注解的方法在整個Bean初始化中的執行順序:
此時的執行順序:

構造方法
Before Initialization
使用PostConstruct注解
InitializingBean接口
init-method指定的初始化方法
After Initialization

代碼:

@Component
public class MyConfig {
private Logger logger = LoggerFactory.getLogger(this.getClass());

@Value("${My_Config_Array}")
private String myConfigArray;


@PostConstruct
public void init() {
logger.info("我的配置信息=[{}]",myConfigArray);
}

/**
* 在構造函數中打印配置信息
*/
public MyConfig() {
logger.info("MyConfig構造函數啟動>>>");
}
}

 


項目啟動打印日志:
2021-11-09 19:50:27.698 [main] [,] INFO c.a.project.config.MyConfig#<init> [line:29] - MyConfig構造函數啟動>>>
2021-11-09 19:50:27.700 [main] [,] INFO c.a.project.config.MyConfig#init [line:22] - 我的配置信息=[225,210,209]


原文鏈接:https://www.cnblogs.com/pipicai96/p/11718761.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM