千家信息网

SpringBoot怎么配置文件给实体注入值

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,这篇文章主要介绍了SpringBoot怎么配置文件给实体注入值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么配置文件给实体注入值文章都会有所收获,
千家信息网最后更新 2025年11月16日SpringBoot怎么配置文件给实体注入值

这篇文章主要介绍了SpringBoot怎么配置文件给实体注入值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么配置文件给实体注入值文章都会有所收获,下面我们一起来看看吧。

配置文件给实体注入值

SpringBoot 默认的全局配置文件有两个 application.properties 和application.yml

properties用法

# 例如修改端口号 直接赋值server.port=8888

yaml用法

# 例如修改端口号server:    port: 8888
  • YML中赋值是以键值对的形式,且利用缩进表示层级关系,同一级缩进必须一致

  • 大小写敏感,支持松散写法,且冒号后面必须有一个空格

通过配置文件给实体类注入属性

// 实体类@Component // 把实体类放入到spring容器中@ConfigurationProperties(prefix = "student") // 识别配置文件public class Student {    private String name;    private int age;    private boolean sex;    private Date birthday;    private Map location;    private String[] hobbies;    private List skills;    private Pet pet;        // .... set/get/toString}
# yml 配置文件student:         name: zs        age: 23        sex: true        birthday: 2020/10/1        location: {province: 湖北,city: 武汉, zone: 洪山}        hobbies: [足球, 篮球]        skills: [编程, 金融]        pet:                 nickName: wc                strain: hsq

在这里注意不同数据类型的写法,简单的数据直接赋值

# map类型和对象类型 的两种写法# 1.行内写法location: {province: 湖北,city: 武汉, zone: 洪山}pet: {nickName: wc, strain: hsq}# 2.分行写location:        province: 湖北        city: 武汉        zone: 洪山pet:         nickName: wc        strain: hsq
# 数组、list、set# 1、行内写法, 其中中括号还可以省略hobbies: [足球, 篮球]skills: [编程, 金融]# 2、分行写hobbies:        - 足球        - 篮球skills:         - 编程        - 金融

到 SpringBoot 测试文件中测试输出

    @Autowired    Student student;    @Test    void contextLoads() {        System.out.println(student);    }

结果

Student{name='zs', age=23, sex=true, birthday=Thu Oct 01 00:00:00 CST 2020, location={province=湖北, city=武汉, zone=洪山}, hobbies=[足球,篮球], skills=[编程, 金融], pet=Pet{nickName='wc', strain='hsq'}}

上面yml中注意

# 如果对字符串加单引号,双引号会有什么区别location: {province: "湖北",city: '武汉', zone: 洪山}# 如果引号中只是字符串时没什么区别location: {province: "湖\n北",city: '武\n汉', zone: 洪\n山}# 此时双引号中的转义字符会被识别,会换行,单引号和不加引号会原样输出

也可以使用properties注入

student.name=lsstudent.age=24...

其中properties文件和yml文件中的值可以互相引用。两个配置文件可以互补,properties文件优先级高于yml

另外如果要注入的值不在这两个默认配置文件中,这是需要使用@PropertySource注解,遗憾的是该注解只支持properties文件,不支持yml文件

@PropertySource(value = {"classpath:conf.properties"})public class Student {    ...

配置文件值注入方式

1.1 从全局配置文件中读取配置到实体类 (@ConfigurationProperties)

配置文件 (application.yml)(写在application.properties也可以,格式变一下即可)

person:  lastName: Mary  age: 16  birthDate: 2004/01/01  maps: {one:1,two:2,three:3}  lists:    - 1    - 2    - 3  pet:    name: wangcai    age: 3

实体类(javaBean):

/** * 将配置文件中配置的每一个属性的值,映射到这个组件中 * * @Component: *     只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能; * * @ConfigurationProperties: *     告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定(默认配置文件为application.properties与       *     application.yml); * * prefix = "person": *       配置文件中哪个下面的所有属性进行一一映射 */@Component@ConfigurationProperties(prefix = "person")public class Person {    private String lastName;    private Integer age;    private Date birthDate;    private Map maps;    private List lists;    private Pet pet;    //省略get,set方法    @Override    public String toString() {        String mapValue = "";                if(this.maps!=null){            for(String key:this.maps.keySet()){                Object value = this.maps.get(key);                mapValue += key+"\t"+value+"\t";            }        }        return "lastName:"+this.lastName+                "\nage:"+this.age+                "\nbirthDate:"+this.birthDate+                "\nmaps:"+mapValue+                "\nlists:"+this.lists+                this.pet;    }}
public class Pet {    private String name;    private Integer age;    //省略get,set方法        @Override    public String toString() {        return "\nPet:\n\tPet name:"+this.name+                "\n\tPet age:"+this.age+"\n";    }}

我们可以导入配置文件处理器,以后编写配置就有提示了(pom.xml)

    org.springframework.boot    spring-boot-configuration-processor    true

测试

@SpringBootTestclass DemoApplicationTests {    @Autowired    Person person;    @Test    void contextLoads() {        System.out.println(person.toString());    }}

1.2 全局配置文件注入值(@Value)

@Value 其实是Spring中的注解,其功能使用xml文件描述是这样的:

       

其中property表示的是Person类中的各项属性,name用于指定具体属性,value用于指定值。

value的值主要有3种:

  • 字面量,也就是数字(1,2…)、字符串(abc)、布尔变量(true、false)等常量

  • ${key},从环境变量、配置文件中获取值

  • #{SpEL}, Spring的表达式语言,可以执行一些计算,调用一些函数

@Componentpublic class Person {    @Value("${person.last-name}")  //@Value("#{'Lily'.toUpperCase()}")    private String lastName;    @Value("#{11*2}")    private Integer age;    private Date birthDate;    private Map maps;    private List lists;    private Pet pet;        //省略get,set和toString    }

1.3 从指定文件读取并配置实体类(@PropertySource+@ConfigurationProperties)

在 resources 目录下创建 person.properties

person.lastName = Lilyperson.age = 20person.birthDate = 2000/01/01person.maps.one = 1person.maps.two = 2person.lists = a,b,chperson.pet.name = wangcaiperson.pet.age = 3

更改 Person 类中的注解

@Component@PropertySource(value = {"classpath:person.properties"})@ConfigurationProperties(prefix = "person")public class Person {    //...省略属性,get,set,toString}

要注意的是,PropertySource 只支持properties文件,不支持yml文件读取。

1.4 从指定文件读取并注入值(@PropertySource+@Value)

创建配置文件

更改注释

@Component@PropertySource(value = {"classpath:person.properties"})public class Person {        @Value("${person.last-name}")    private String lastName;        //...省略属性,get,set,toString}

关于"SpringBoot怎么配置文件给实体注入值"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"SpringBoot怎么配置文件给实体注入值"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

0