现在尝试用aplication.properties文件来进行属性注入
1.首先写实体类Book
package org.javaboy.properties;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
//Book这个类要加载到spring容器中去
@Component
public class Book {
//将properties中属性的值绑定到这里
@Value("${book.id}")
private Long id;
@Value("${book.name}")
private String name;
@Value("${book.author}")
private String author;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
'}';
}
}
2.在aplication.properties中写属性配置
book.name=三国演义
book.author=罗贯中
book.id=99
3.编写测试类PropertiesApplicationTests
package org.javaboy.properties;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class PropertiesApplicationTests {
@Autowired
private Book book;
@Test
void contextLoads() {
System.out.println(book);
}
}
这里将Book书体类注入,看能否打印出properties中的值
启动服务器之后发现本来的中文打印出来都是乱码
解决方案:
1.点击File下的Settings
2.点击File Encodings
随后将编码方式都改成UTF-8,自动转换打勾
3.重新启动
可以看出properties中配置的值传入实体类成功,当我们启动时,application.properties自动加载,里面写的配置被加载进实体类。
现在我们不想在properties中去写,想自己创建一个配置类看看能否成功注入到实体类中
1.编写book.properties
book.name=三国演义
book.author=罗贯中
book.id=99
2.然后要在实体类中添加
//加载resources下的book.properties文件 @PropertySource("classpath:book.properties")
重新启动之后内容打印成功
但是现在还是有问题,你的实体类中的每一个属性上都加上了@Value(),要是其中一个地方写错那控制台就会报错,对于这个问题,springboot提供了类型安全属性注入,现在来重新写一下Book类
package org.javaboy.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
//Book这个类要加载到spring容器中去
@Component
//加载resources下的book.properties文件
@PropertySource("classpath:book.properties")
//springboot提供类型安全的属性注入 prefix为前缀
@ConfigurationProperties(prefix = "book")
public class Book {
//将properties中属性的值绑定到这里
// @Value("${book.id}")
private Long id;
// @Value("${book.name}")
private String name;
// @Value("${book.author}")
private String author;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
'}';
}
}
可以看出我把所有的@Value都注释掉了,并且在类前添加注解:@ConfigurationProperties(prefix = “book”) prefix是前缀,这里的前缀名是book。
启动之后打印成功