含义:该属性使强类型的Bean可以管理和验证应用程序的配置。可以说是@Value("${property}")注释的替代方法。
@Value("${property}")的缺点:当配置非常多时,如果引用的地方也非常多,需要在很多地方通过@Value注入属性。会造成代码重复和后期维护麻烦。因为@Value属于动态获取值,JavaBean属性不能用static修饰符修饰。
application.yml配置如下:
server:
port: 9000
my:
bean:
id: 1
name: ouyangjun
或application.properties配置如下:
server.port=9000
my.bean.id=1
my.bean.name=ouyangjun
MyBeanProperties.java内容如下:
package com.oysept.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @Component: 将该类注册成一个Bean
*/
@Component
@ConfigurationProperties(prefix = "my.bean")
public class MyBeanProperties {
private Integer id;
private String name;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
PropertyController.java内容如下:
package com.oysept.controller;
import com.oysept.config.MyBeanProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
@RestController
public class PropertyController {
// 根据类型注入使用
@Autowired
private MyBeanProperties myBean;
// http://localhost:9000/test/property
@RequestMapping(value="/test/property")
public String property() {
return "Time: "+ LocalDateTime.now() + ", id: " + myBean.getId() + ", name: " + myBean.getName();
}
}
第一步:先创建一个Bean,并提供get、set方法
package com.oysept.bean;
public class MyBean {
private Integer id;
private String name;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
第二步:在配置文件中增加属性值
application.yml配置文件如下:该配置具有[index]的默认索引
server:
port: 9000
mys:
beans:
list:
- id: 666
name: oysept
- id: 999
name: ouyangjun
或application.properties配置文件如下:
server.port=9000
mys.beans.list[0].id=666
mys.beans.list[0].name=oysept
mys.beans.list[1].id=999
mys.beans.list[1].name=ouyangjun
第三步:MyListProperties.java内容如下:
注:JavaBean中的属性名需要和配置文件名称保持一致。
package com.oysept.config;
import com.oysept.bean.MyBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* @Component: 将该类注册成一个Bean
*/
@Component
@ConfigurationProperties(prefix = "mys.beans")
public class MyListProperties {
private List list = new ArrayList();
public List getList() {return list;}
public void setList(List list) {this.list = list;}
}
list效果图:
第一步:先创建一个Bean,并提供get、set方法
package com.oysept.bean;
public class MyBean {
private Integer id;
private String name;
public Integer getId() {return id;}
public void setId(Integer id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
第二步:在配置文件中增加属性值
application.yml配置文件如下:
server:
port: 9000
maps:
map:
key1:
id: 333
key2:
id: 888
name: my map test
或application.properties配置文件如下:
server.port=9000
maps.map.key1.id=333
maps.map.key2.id=888
maps.map.key2.name=my map test
第三步:MyMapProperties.java内容如下:
package com.oysept.config;
import com.oysept.bean.MyBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @Component: 将该类注册成一个Bean
*/
@Component
@ConfigurationProperties(prefix = "maps")
public class MyMapProperties {
private Map map = new HashMap();
public Map getMap() {return map;}
public void setMap(Map map) {this.map = map;}
}
map效果图:
宽松绑定:属性的命名语法
语法1、acme.my-project.person.first-name,建议在.properties和.yml文件中使用。
语法2、acme.myProject.person.firstName:标准驼峰式语法。
语法3、acme.my_project.person.first_name:下划线表示法,是在.properties和.yml文件中使用的另一种格式。
语法4:ACME_MYPROJECT_PERSON_FIRSTNAME:大写格式,使用系统环境变量时建议使用。
注:如果确实想使用@Value,建议您使用规范形式来引用属性名称(kebab-case仅使用小写字母)。
例如,@Value("{demo.item-price}")将会把demo.item-price或demo.itemPrice从application.properties配件文件查找。
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!