關(guān)于@Value取值為NULL的解決方案
@Value取值為NULL的問(wèn)題
在spring mvc架構(gòu)中,如果希望在程序中直接使用properties中定義的配置值,通常使用一下方式來(lái)獲?。?/p>
? ? @Value("${tag}") ? ? private String tagValue;
但是取值時(shí),有時(shí)這個(gè)tagvalue為NULL,可能原因有:
使用static或final修飾了tagValue,如下:
? ? private static String tagValue; ?//錯(cuò)誤 ? ? private final String tagValue; ? ?//錯(cuò)誤
類沒(méi)有加上@Component(或者@service等)
? ? @Component ? //遺漏 ? ? class TestValue{ ? ? ? ? ?@Value("${tag}") ? ? ? ? ?private String tagValue; ? ? }
類被new新建了實(shí)例,而沒(méi)有使用@Autowired
? @Component ?? ? ? class TestValue{ ? ? ? ? ?@Value("${tag}") ? ? ? ? ?private String tagValue; ? ? } ? ? class Test{ ? ? ? ? ... ? ? ? ? TestValue testValue = new TestValue() ? ? }
這個(gè)testValue中肯定是取不到值的,必須使用@Autowired:
class Test{ ? ? ? ? @AutoWired ? ? ? ? TestValue testValue ? ? }
@Value取值為NULL原因分析
有兩種方式:
@Value(“${}”)
用于獲取配置文件中的屬性值,通常用于獲取寫(xiě)在application.properties中的內(nèi)容;@Value(“#{}”)
其實(shí)是SpEL表達(dá)式的值,可以表示常量的值,或者獲取bean中的屬性
區(qū)別:
① ${ property : default_value }
//property對(duì)應(yīng)外部配置文件,default_value,就是前面的值為空時(shí)的默認(rèn)值。② #{ obj.property? :default_value }
//SpEL表達(dá)式,obj代表對(duì)象
一.@Value(“${}”)的使用
@Value("${inputDir}") private String inputDir;
但有時(shí)候@Value(“${}”)取值為NULL,可能是由下面幾個(gè)原因造成的:
1.類沒(méi)有交給spring管理,即沒(méi)有加上@Component等注解
@Service public class TestValue{ @Value("${inputDir}") private String inputDir; …… }
2.使用 static或final修飾成員變量
@Value("${inputDir}") private static String inputDir;//錯(cuò)誤,不能使用@Value給static成員變量賦值 @Value("${inputDir}") private final String inputDir;//錯(cuò)誤,不能使用@Value給final成員變量賦值
3.自己new了一個(gè)對(duì)象實(shí)例,而沒(méi)有使用@Autowired注解
class Test{ @AutoWired TestValue testValue //TestValue testValue = new TestValue()//錯(cuò)誤,自己new的對(duì)象不能通過(guò)@Value注解獲取配置值。 }
二.@Value{“#{}”}的使用
@RestController @RequestMapping("/login") @Component public class LoginController { @Value("#{1}") private int number; //獲取數(shù)字 1 @Value("#{'Spring Expression Language'}") //獲取字符串常量 private String str; @Value("#{dataSource.url}") //獲取bean的屬性,dataSource為spring管理的obj,不是配置文件中的配置項(xiàng) private String jdbcUrl; @Autowired private DataSourceTransactionManager transactionManager; @RequestMapping("login") public String login(String name,String password) throws FileNotFoundException{ System.out.println(number); System.out.println(str); System.out.println(jdbcUrl); return "login"; } }
運(yùn)行結(jié)果
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA8如何妙用Optional解決NPE問(wèn)題詳解
在Java中,null代表一個(gè)不存在的對(duì)象,如果對(duì)它進(jìn)行操作就會(huì)拋出java.lang.NullPointerException異常,下面這篇文章主要給大家介紹了關(guān)于JAVA8如何妙用Optional解決NPE問(wèn)題的相關(guān)資料,需要的朋友可以參考下2018-06-06java多線程編程之慎重使用volatile關(guān)鍵字
volatile關(guān)鍵字相信了解Java多線程的讀者都很清楚它的作用。volatile關(guān)鍵字用于聲明簡(jiǎn)單類型變量,下面看一下為什么要慎重使用volatile關(guān)鍵字2014-01-01Spring Boot 通過(guò)CORS實(shí)現(xiàn)跨域問(wèn)題
這篇文章主要介紹了Spring Boot 通過(guò)CORS實(shí)現(xiàn)跨域,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09java常見(jiàn)事件響應(yīng)方法實(shí)例匯總
這篇文章主要介紹了java常見(jiàn)事件響應(yīng)方法,對(duì)于初學(xué)者有很好的參考借鑒價(jià)值,分享給大家,需要的朋友可以參考下2014-08-08Springboot+AOP實(shí)現(xiàn)返回?cái)?shù)據(jù)提示語(yǔ)國(guó)際化的示例代碼
這篇文章主要介紹了Springboot+AOP實(shí)現(xiàn)返回?cái)?shù)據(jù)提示語(yǔ)國(guó)際化的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07SpringMVC的簡(jiǎn)單傳值(實(shí)現(xiàn)代碼)
下面小編就為大家?guī)?lái)一篇SpringMVC的簡(jiǎn)單傳值(實(shí)現(xiàn)代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05