SpringBoot的ConfigurationProperties或Value注解無效問題及解決
SpringBoot的ConfigurationProperties或Value注解無效
記錄一個(gè)問題
在一般的SpringBoot項(xiàng)目開發(fā)中,我們一般會(huì)創(chuàng)建一些全局的靜態(tài)配置類,用來讀取application.yml/application.properties配置文件的內(nèi)容。
普遍的做法是利用@Component和@ConfigurationProperties(prefix = “XXX”)這兩個(gè)注解來幫我們實(shí)現(xiàn)。
# 項(xiàng)目相關(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 { /** 項(xiàng)目名稱 */ private static String name; public static String getName() { return name; } public static void setName(String name) { Global.name = name; } }
原理非常簡(jiǎn)單,利用Spring將屬性注入到靜態(tài)類,然后通過靜態(tài)類的特性使我們可以在項(xiàng)目全局取到它的值。
但是,當(dāng)我們照貓畫虎的創(chuàng)建了一個(gè)靜態(tài)類后,卻發(fā)現(xiàn)我們?nèi)〉闹凳冀K為null。
難道是Component注解失效了嗎?并不是,我們創(chuàng)建一個(gè)同名的Bean后提示命名重復(fù)。
難道是ConfigurationProperties注解失效了嗎?帶著疑問,我們繼續(xù)研究。
發(fā)現(xiàn)問題所在
作為一名資深的CV程序員,已經(jīng)多年沒有手打過Get/Set方法了。
然而問題就在這里。當(dāng)我們創(chuàng)建了一個(gè)靜態(tài)屬性時(shí),IDE幫我們生成的Get/Set方法都默認(rèn)加上了static。
/** 項(xiàng)目名稱 */ private static String name; public static String getName() { return name; } public static void setName(String name) { Global.name = name; }
而Spring在注入這些屬性時(shí),反射的Set方法不會(huì)對(duì)static方法起作用。
所以導(dǎo)致了我們的set方法沒有被調(diào)用。
解決方法
去掉Set方法的static
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot中@ConfigurationProperties自動(dòng)獲取配置參數(shù)的流程步驟
- SpringBoot中的@Configuration、@MapperScan注解
- Springboot之@ConfigurationProperties注解解讀
- Spring解讀@Component和@Configuration的區(qū)別以及源碼分析
- Springboot中@ConfigurationProperties輕松管理應(yīng)用程序的配置信息詳解
- 解決Spring運(yùn)行時(shí)報(bào)錯(cuò):Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration
相關(guān)文章
SpringBoot日志框架之Log4j2快速入門與參數(shù)詳解
本文介紹了SpringBoot日志框架log4j2的基本使用和配置方法,包括將日志輸出到控制臺(tái)、文件、Elasticsearch和Kafka,多個(gè)輸出目的地的配置,異步日志記錄器的使用以及l(fā)og4j2.xml配置文件的詳細(xì)語(yǔ)法和參數(shù)含義,需要的朋友可以參考下2023-05-05java怎樣動(dòng)態(tài)獲取泛型參數(shù)的類型
在Java中,泛型信息在編譯時(shí)會(huì)被擦除,但可以通過特定API獲取運(yùn)行時(shí)的泛型參數(shù)類型,主要API包括Class的getGenericSuperclass()和getGenericInterfaces()方法,以及ParameterizedType的getActualTypeArguments()方法2024-09-09SpringBoot前后端分離實(shí)現(xiàn)驗(yàn)證碼操作
驗(yàn)證碼的功能是防止非法用戶惡意去訪問登錄接口而設(shè)置的一個(gè)功能,今天我們就來看看在前后端分離的項(xiàng)目中,SpringBoot是如何提供服務(wù)的2022-05-05Java ArrayList的底層實(shí)現(xiàn)方法
今天小編就為大家分享一篇Java ArrayList的底層實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題
我們?cè)谑褂胕dea的時(shí)候經(jīng)常會(huì)遇到一些問題,本文介紹了如何解決idea出現(xiàn)的java.lang.OutOfMemoryError:?Java?heap?space的問題,文中有相關(guān)的圖文示例,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06java定時(shí)任務(wù)的實(shí)現(xiàn)方法
java定時(shí)任務(wù)的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03