SpringBoot的ConfigurationProperties或Value注解無效問題及解決
SpringBoot的ConfigurationProperties或Value注解無效
記錄一個問題
在一般的SpringBoot項目開發(fā)中,我們一般會創(chuàng)建一些全局的靜態(tài)配置類,用來讀取application.yml/application.properties配置文件的內(nèi)容。
普遍的做法是利用@Component和@ConfigurationProperties(prefix = “XXX”)這兩個注解來幫我們實現(xiàn)。
# 項目相關(guān)配置 cadre: # 名稱 name: cadreuc
package com.cadre.common.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 全局配置類
*
* @author cadre
*/
@Component
@ConfigurationProperties(prefix = "cadreman")
public class Global
{
/** 項目名稱 */
private static String name;
public static String getName()
{
return name;
}
public static void setName(String name)
{
Global.name = name;
}
}
原理非常簡單,利用Spring將屬性注入到靜態(tài)類,然后通過靜態(tài)類的特性使我們可以在項目全局取到它的值。
但是,當(dāng)我們照貓畫虎的創(chuàng)建了一個靜態(tài)類后,卻發(fā)現(xiàn)我們?nèi)〉闹凳冀K為null。
難道是Component注解失效了嗎?并不是,我們創(chuàng)建一個同名的Bean后提示命名重復(fù)。
難道是ConfigurationProperties注解失效了嗎?帶著疑問,我們繼續(xù)研究。
發(fā)現(xiàn)問題所在
作為一名資深的CV程序員,已經(jīng)多年沒有手打過Get/Set方法了。
然而問題就在這里。當(dāng)我們創(chuàng)建了一個靜態(tài)屬性時,IDE幫我們生成的Get/Set方法都默認(rèn)加上了static。
/** 項目名稱 */
private static String name;
public static String getName()
{
return name;
}
public static void setName(String name)
{
Global.name = name;
}
而Spring在注入這些屬性時,反射的Set方法不會對static方法起作用。
所以導(dǎo)致了我們的set方法沒有被調(diào)用。
解決方法
去掉Set方法的static
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- SpringBoot中@ConfigurationProperties自動獲取配置參數(shù)的流程步驟
- SpringBoot中的@Configuration、@MapperScan注解
- Springboot之@ConfigurationProperties注解解讀
- Spring解讀@Component和@Configuration的區(qū)別以及源碼分析
- Springboot中@ConfigurationProperties輕松管理應(yīng)用程序的配置信息詳解
- 解決Spring運行時報錯:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration
相關(guān)文章
SpringBoot日志框架之Log4j2快速入門與參數(shù)詳解
本文介紹了SpringBoot日志框架log4j2的基本使用和配置方法,包括將日志輸出到控制臺、文件、Elasticsearch和Kafka,多個輸出目的地的配置,異步日志記錄器的使用以及l(fā)og4j2.xml配置文件的詳細(xì)語法和參數(shù)含義,需要的朋友可以參考下2023-05-05
解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題
我們在使用idea的時候經(jīng)常會遇到一些問題,本文介紹了如何解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題,文中有相關(guān)的圖文示例,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06

