今天在做項目的時候,發現明明給一個字段標注了@Value 並成功讀取到了 application.properties 中屬性值
但是在調用構造函數的時候 缺報了空指針異常,構造函數中需要的一個值沒有傳入。
后來經過查找資料,發現 spring的屬性注入有兩種方法:
1. 屬性注入:通過無參構造函數+setter方法注入
2. 構造注入:通過有參的構造函數注入。
屬性注入是 spring調用了類的無參構造函數創建一個對象,然后利用setter方法賦值。
這種情況下,構造函數先於屬性注入,如果在構造函數中對屬性的值進行了判斷,就會報空指針異常!
構造注入是通過有參的構造函數注入,如果需要在構造對象的時候便對成員賦值,推薦采用此種方法。
構造函數的參數上使用@Value進行注入
public XXXDao(@Value("${mongodb.host}") String mongoHost{
xxxxxxxxxxx;
}
資料來源自https://blog.csdn.net/achang07/article/details/79419006?utm_source=blogxgwz7,侵刪。