一丶注值方式
1.在application.properties文件中注值
首先我们将application.yml中的学生名字和年龄给注释掉,来验证在applic.properties的注值方式。
student:
#简单类型
#name: djk
#age: 20
sex: true
birthday: 2000/07/15
#map类型:
location:
#写法2:
province: sd
city: wf
zone: sg
#写法1:{province: sd,city: wf,zone: sg} 行内写法
#数组类型:
habbies:
[篮球,兵乓球,书法] #行内写法
#- 篮球
#- 兵乓球
#- 书法
#集合类型:
skills:
[计算机,编程,springboot] #行内写法
#- 计算机
#- 编程
#- springboot
#类 类型
Pet:
#写法2
{nickname: xiaobai,strain: jiwawa}
#写法1
#nickname: xiaobai
#strain: jiwawa
server.port=8088
#spring.http.encoding.charset=
#debug=true
student.name = fmd
student.age = 18
然后我们来运行,可以看到,值已经被注入进去了。
总结:
两种绑值方式是互补的,application.properties的优先级比application.yml的优先级要高。
2.在application.yml文件中注值
在我的上一篇springboot学习笔记(四)中已经介绍
二丶绑值方式
@ConfigurationProperties
在我的上一篇springboot学习笔记(四)中已经介绍
@Value
该方式只能单个注值!
package com.example.bean;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //将javabean放入spring容器内
@ConfigurationProperties(prefix = "student")//spring-boot 提供@ConfigurationProperties注解将配置文件的值映射到类上使用
public class Student {
@Value("www")
private String name;
@Value("555")
private int age;
private boolean sex;
private Date birthday;
private Map<String,Object> location;
private String[] habbies;
private List<String> skills;
private Pet pet;
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;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Map<String, Object> getLocation() {
return location;
}
public void setLocation(Map<String, Object> location) {
this.location = location;
}
public String[] getHabbies() {
return habbies;
}
public void setHabbies(String[] habbies) {
this.habbies = habbies;
}
public List<String> getSkills() {
return skills;
}
public void setSkills(List<String> skills) {
this.skills = skills;
}
public Pet getPet() {
return pet;
}
public void setPet(Pet pet) {
this.pet = pet;
}
public Student(String name, int age, boolean sex, Date birthday, Map<String, Object> location, String[] habbies,
List<String> skills, Pet pet) {
super();
this.name = name;
this.age = age;
this.sex = sex;
this.birthday = birthday;
this.location = location;
this.habbies = habbies;
this.skills = skills;
this.pet = pet;
}
public Student() {
super();
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", birthday=" + birthday + ", habbies="
+ Arrays.toString(habbies) + ", skills=" + skills + ", pet=" + pet + "]";
}
}
经运行, 可以看到绑值成功
松散语法
驼峰命名与松散语法可以互补;例如:nickName 等价于 nick-name
在application.yml文件中修改如下:
经运行测试,成功
注意:
当我们使用@ConfigurationProperties注解时,会有一个警告。
我们只需要单击就可以解决。可以发现,在pom文件中添加了该依赖(用于实现配置操作)
两种绑值方式的异同及联系
@ConfigurationProperties | @Value |
|
注值方式 | 批量注入 | 单个注入 |
松散语法 | 支持 | 不支持 |
SpringEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
注入复杂类型 | 支持 | 不支持 |
联系:@ConfigurationProperties与 @Value可以互补,@ConfigurationProperties的优先级较高。
SpringEL
示例:
application.yml文件中修改如下:
Student类中修改如下:
JSR303数据校验
示例:
在Student类中添加一个email属性
在application.yml文件中写入一个错误的邮箱
运行发现:
注入复杂类型
简单类型:8个基本数据类型+String+Date
@PropertySource注解
作用:springboot默认会加载的配置文件是application.properties和application.yml中的数据
但是如果数据不在这两个文件里面或者不适用这两个默认配置文件中的数据,则需要该注解进行加载。
但是@PropertySource注解只能加载properties文件,而不能加载yml文件。
示例:
把两个默认配置文件中的name注释掉,然后新建conf.properties文件
修改Student类,如下:
绑值成功
不知不觉,springboot已经学习了这么多的知识,加油+努力!