微人事第二天:属性注入

现在尝试用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
微人事第二天:属性注入_第1张图片
2.点击File Encodings
微人事第二天:属性注入_第2张图片
随后将编码方式都改成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。

启动之后打印成功

你可能感兴趣的:(微人事课程)