SpringBoot的屬性賦值@Value的用法說明
今天學習到了SpringBoot 的屬性賦值@Value用法
先總結
@Value(" 張三 "):直接附在屬性名上,在Bean初始化時,會賦初始值@Value(" #{ 20 - 2 } "):可以用 #{ },里面可以寫表達式,當然也可以直接 @Value(" #{ 18 } ") 或 @Value(" 18 ")@Value(" ${ person.name } "):利用 ${ } 可以取出配置文件中的值
例子
配置類:
@PropertySource(value={"classpath:/person.properties"})
@Configuration
public class MainConfigOfPropertyValues {
?
?? ?@Bean
?? ?public Person person() {
?? ??? ?return new Person();
?? ?}?? ?
}@Configuration:告訴 Spring 這是一個配置類@PropertySource:關聯(lián)配置文件,使用 @PropertySource 指定讀取外部配置文件,保存到運行的環(huán)境變量中,然后可以用@Value(" ${ person.name } ") 獲取環(huán)境變量中的值。
Bean :
public class Person {?
?? ?/*
?? ? * 使用@Value賦值:
?? ? * ?? ?1. 基本數(shù)值
?? ? * ?? ?2. 可以寫 #{ }
?? ? * ?? ?3. 可以寫 ${ },取出配置文件{properties}中的值
?? ? */
?? ?
?? ?@Value("張三")
?? ?private String name;
?? ?@Value("#{20-2}")
?? ?private int age;
?? ?@Value("${person.nickName}")
?? ?private String nickName;
?? ?
?? ?public String getNickName() {
?? ??? ?return nickName;
?? ?}
?? ?public void setNickName(String nickName) {
?? ??? ?this.nickName = nickName;
?? ?}
?? ?public String getName() {
?? ??? ?return name;
?? ?}
?? ?public void setName(String name) {
?? ??? ?this.name = name;
?? ?}
?? ?public int getAge() {
?? ??? ?return age;
?? ?}
?? ?public void setAge(int age) {
?? ??? ?this.age = age;
?? ?}
?? ?@Override
?? ?public String toString() {
?? ??? ?return "Person [name=" + name + ", age=" + age + ", nickName=" + nickName + "]";
?? ?}
?? ?public Person(String name, int age, String nickName) {
?? ??? ?super();
?? ??? ?this.name = name;
?? ??? ?this.age = age;
?? ??? ?this.nickName = nickName;
?? ?}
?? ?public Person() {
?? ??? ?super();
?? ??? ?// TODO Auto-generated constructor stub
?? ?}?? ?
}配置文件:
person.nickName=\u5C0F\u4E09
這里面的 \u5C0F\u4E09 表示的是“小三”
而配置文件的位置:

運行:
public class IOCTest_PropertyValue {
//容器創(chuàng)建
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfPropertyValues.class);
//打印容器中Bean的name
private void printBeans(AnnotationConfigApplicationContext applicationContext) {
String[] definitionName = applicationContext.getBeanDefinitionNames();
for(String name : definitionName) {
System.out.println(name);
}
}
@Test
public void test01() {
printBeans(applicationContext);
System.out.println("-------------------------------------------------------");
//獲得容器中的Person
Person person = (Person) applicationContext.getBean("person");
System.out.println(person);
//獲得環(huán)境變量中的值
ConfigurableEnvironment environment = applicationContext.getEnvironment();
String property = environment.getProperty("person.nickName");
System.out.println("環(huán)境變量:"+property);
applicationContext.close();
}
}運行結果:

@Value的使用及注意事項
為什么使用
使用@Vlue可以實現(xiàn)對于線上項目的一些通用配置的修改;或者修改項目中可能出現(xiàn)變動,但是卻又有很多地方都在使用的一些參數(shù),這樣我們我可直接通過修改配置文件而不用修改代碼的方式來達到參數(shù)的修改的目的
參數(shù)形式
yml文件
(簡單的參數(shù))
test1: ? ? ?num: 1 ? ? ?name: xiaoming
獲取數(shù)據(jù)
@Value("${test1.num}")
private int num;
@Value("${test1.name}")
private String name;(數(shù)組||集合)
test: ? array1: aaa,bbb,ccc ? array2: 111,222,333 ? array3: 11.1,22.2,33.3 ? list1: ddd,eeee,111,333,222,444
獲取數(shù)據(jù)
//數(shù)組
@Value("${test.array1:}")
private String[] array1;
//集合
@Value("#{'${test.list1:}'.split(',')}")
private List<String> list1;
//集合進一步做空數(shù)據(jù)處理
@Value("#{'${test.list:}'.empty ? null : '${test.list:}'.split(',')}")
private List<String> testList;(Map)
test:
? map1: '{"name": "zhangsan", "sex": "male"}'
? map2: '{"math": "90", "english": "85"}'獲取數(shù)據(jù)
@Value("#{${test.map2}}")
private Map<String,String> map1;
@Value("#{${test.map2}}")
private Map<String,Integer> map2;前置條件(注意事項)
想要能夠很好的使用的使用@Value 需要注意一些前置條件
1. 使用正確的注解
@Value的使用要找對目標,我們所使用的注解的引用時這樣的

2. yml文件的格式
如果你使用的是yml文件的話,需要注意yml文件的注意格式問題 ,基本上參數(shù)名之后的冒號之后都要加空格,一般情況下,冒號后面加了空格,參數(shù)名都會變?yōu)樗{色

3. @Value使用的環(huán)境要求
- 不能作用于靜態(tài)變量(static);
- 不能作用于常量(final);
- 不能在非注冊的類中使用(類需要被注冊在spring上下文中,如用@Service,@RestController,@Component等);
- 使用這個類時,只能通過依賴注入的方式,用new的方式是不會自動注入這些配置的。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java加載properties文件實現(xiàn)方式詳解
這篇文章主要介紹了Java加載properties文件實現(xiàn)方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-07-07
Java Listener監(jiān)聽器使用規(guī)范詳細介紹
監(jiān)聽器是一個專門用于對其他對象身上發(fā)生的事件或狀態(tài)改變進行監(jiān)聽和相應處理的對象,當被監(jiān)視的對象發(fā)生情況時,立即采取相應的行動。監(jiān)聽器其實就是一個實現(xiàn)特定接口的普通java程序,這個程序專門用于監(jiān)聽另一個java對象的方法調用或屬性改變2023-01-01
基于SpringBoot與Mybatis實現(xiàn)SpringMVC Web項目
這篇文章主要介紹了基于SpringBoot與Mybatis實現(xiàn)SpringMVC Web項目的相關資料,需要的朋友可以參考下2017-04-04

