无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網 會員登陸 & 注冊

Spring @Value靜態(tài)屬性無法注入

2023-07-29 13:16 作者:凱小吧  | 我要投稿

場景

數據庫存的是相對路徑,服務推送等的host值填充

為了方便采用Spring配置文件@Value注入動態(tài)注入

而往往處理這些情況都喜歡封裝工具類靜態(tài)方法調用

配置文件

xxx.host=http:xxxx.com

工具類

@Component
public class XXXUtil {
? ?@Value("xxx.host")
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

看起來很簡單的一個開發(fā)任務,結果一測試發(fā)現host值一直未null。

明顯就是屬性沒有注入成功。

調試發(fā)現去掉static

private String XXXXHOST

可以!?。?/p>

未注入的原因

其實原因很簡單,認真思考下就知道原因。

@Value 注解是依賴于屬性的set方法進行注入的,而static修飾的屬性是類屬性,不存在set方法

解決方法

1、set方法手動賦值

利用非靜態(tài)setter方法注入靜態(tài)變量, 會在Spring加載的時候進行屬性注入

@Component
public class XXXUtil {
? ?
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?@Value("xxx.host")
? ?public void setHost(String host) {
? ? ? ?XXXUtil.XXXXHOST = host;
? ?}

? public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

2、構造方法賦值

set方法差不多

@Component
public class XXXUtil {
? ?
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?@Value("xxx.host")
? ?public XXXUtil(String host) {
? ? ? ?XXXUtil.XXXXHOST = host;
? ?}

? ?public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

3、@PostConstruct

@Component
public class MyComponent { ?
? ?@Value("${xxx.host}") ? ?
? ?private static final String CONSTANT_VALUE; ? ?
? ? *// 省略其他代碼*
}@Configuration
@DependsOn("myComponent")
public class StaticConstantInjectionConfig {

? ?@Bean
? ?public MyComponent myComponent() {
? ? ? ?MyComponent myComponent = new MyComponent();
? ? ? ?myComponent.setStaticConstantValue(CONSTANT_VALUE);
? ? ? ?return myComponent;
? ?}

? ?// 省略其他代碼
}


4、@PostConstruct

Spring 只調用一次用@PostConstruct注釋的方法,就在 bean 屬性的初始化之后。

用 @PostConstruct注釋的方法 可以有任何訪問級別,但不能是靜態(tài)的

@Component
@Slf4j
public class XXXUtil {
? ?
? ?private static String XXXXHOST;

? ?private XXXUtil() {}
? ?
? ?@Value("xxx.host")
? ?private String hostStr;
? ?
? ?@PostConstruct
? ?public void init(){
? ? ? ?XXXXHOST = hostStr;
? ?}

? ?public static String getXXXHost() {
? ? // 方法體省略
? ?}
}

5、SpringUtils

不過多寫了,更多方法歡迎留言討論!

總結

@Value注解可以用來對Spring容器中的bean的屬性進行注入,它能夠被用在屬性,構造方法,普通方法上。


Spring @Value靜態(tài)屬性無法注入的評論 (共 條)

分享到微博請遵守國家法律
远安县| 霍城县| 长白| 丘北县| 宁海县| 井冈山市| 信阳市| 揭东县| 吉木萨尔县| 莫力| 兰溪市| 雅江县| 塘沽区| 句容市| 福安市| 东乌珠穆沁旗| 即墨市| 虹口区| 攀枝花市| 清涧县| 江都市| 六枝特区| 永宁县| 华阴市| 柳林县| 杭锦后旗| 灵璧县| 关岭| 娱乐| 南乐县| 黑龙江省| 金寨县| 东乌珠穆沁旗| 隆昌县| 鄂州市| 南雄市| 巧家县| 拉萨市| 延庆县| 青田县| 工布江达县|