一、SpringBoot的属性注入解释:( @Value / @ConfigurationProperties )
1.1):使用SpringBoot全局配置文件设置属性时:
-
如果配置属性是Spring Boot已有属性,例如服务端口server.port,那么Spring Boot内部会自动扫描并 读取这些配置文件中的属性值并覆盖默认属性。
-
如果配置的属性是用户自定义属性,例如刚刚自定义的Person实体类属性,还必须在程序中注入这些配 置属性方可生效。
1.2):属性注入常用注解包括:
-
@Configuration:声明一个类作为配置类。
-
@Bean:声明在方法上,将方法的返回值加入Bean容器。
-
@Value:属性注入。
-
@ConfigurationProperties(prefix = “users”):批量属性注入。
-
@PropertySource(“classpath:/jdbc.properties”)指定外部属性文件。在类上添加。
二、使用@Value属性注入:
Demo案例代码,并利用@Value注解注入:
目录结构:(下面我只写用得到的代码哦!注意目录名字)

Users.java:
package com.sxtt.controller.Beans;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/***
* @Author Laugh"
*
* 可以通过@Value + SPEL 直接绑定SpringBoot配置文件 .yml里的值
* @Value() 固定写法,“${XXXX.XXXX}” 配置文件里面的值
* 案例1:
* @Value("${users.username}")
* private String username;
*
* 案例2:
* @ConfigurationProperties(prefix="users")
* 常用于bean属性和.yml配置文件
* prefix属性 可以指定配置文件中的某节点,该节点中的子节点将自动和属性进行配对绑定
* 注意:ConfigurationProperties 这个注解 比较简单,应该说是比较容易/松散,不限定特殊写法,例如:大写 / 驼峰 / 下划线 / 中划线 / 小写 都会被识别
*/
@Component
public class Users {
@Value("${users.username}")
private String username;
@Value("${users.age}")
private Integer age;
private List<String> hobby;
private Date birthday;
private Map<Integer,String> girlfriend;
private Address address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<String> getHobby() {
return hobby;
}
public void setHobby(List<String> hobby) {
this.hobby = hobby;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Map<Integer, String> getGirlfriend() {
return girlfriend;
}
public void setGirlfriend(Map<Integer, String> girlfriend) {
this.girlfriend = girlfriend;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Users{" +
"username='" + username + '/'' +
", age=" + age +
", hobby=" + hobby +
", birthday=" + birthday +
", girlfriend=" + girlfriend +
", address=" + address +
'}';
}
}
application.yml:
server:
port: 8080
servlet:
context-path: /laugh
users:
username: Laugh"
age: 25
App.java:
package com.sxtt;
import com.sxtt.controller.Beans.Users;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class App {
@Autowired
private Users user;
@Test
void contextLoads(){
System.out.println(user);
}
}
输出结果:

三、使用@ConfigurationProperties属性注入:
Demo案例代码,并利用@ConfigurationProperties注解注入:
目录结构同上:
注意:其余不变,改变的只有Users.java哦:
Users.java:
package com.sxtt.controller.Beans;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/***
* @Author Laugh"
*
* 可以通过@Value + SPEL 直接绑定SpringBoot配置文件 .yml里的值
* @Value() 固定写法,“${XXXX.XXXX}” 配置文件里面的值
* 案例1:
* @Value("${users.username}")
* private String username;
*
* 案例2:
* @ConfigurationProperties(prefix="users")
* 常用于bean属性和.yml配置文件
* prefix属性 可以指定配置文件中的某节点,该节点中的子节点将自动和属性进行配对绑定
* 注意:ConfigurationProperties 这个注解 比较简单,应该说是比较容易/松散,不限定特殊写法,例如:大写 / 驼峰 / 下划线 / 中划线 / 小写 都会被识别
*/
@Component
@ConfigurationProperties(prefix="users")
public class Users {
private String username;
private Integer age;
private List<String> hobby;
private Date birthday;
private Map<Integer,String> girlfriend;
private Address address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<String> getHobby() {
return hobby;
}
public void setHobby(List<String> hobby) {
this.hobby = hobby;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Map<Integer, String> getGirlfriend() {
return girlfriend;
}
public void setGirlfriend(Map<Integer, String> girlfriend) {
this.girlfriend = girlfriend;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return "Users{" +
"username='" + username + '/'' +
", age=" + age +
", hobby=" + hobby +
", birthday=" + birthday +
", girlfriend=" + girlfriend +
", address=" + address +
'}';
}
}
输出结果:

四、补充说明:
其.yml配置文件,可以有很多种写法:
4.1):小写:
users: username: Laugh" age: 25
4.2):大写:
users: USERNAME: Laugh" AGE: 25
4.3):驼峰:
users: userName: Laugh" age: 25
4.4):中划线:
users: user-Name: Laugh" age: 25
4.5):下划线:
users: user_Name: Laugh" age: 25
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/279165.html