Spring 注解驱动开发_属性赋值

一、@Value 注解

@Value 注解支持以下几种赋值方式:

  • 基本数值
  • 支持 SpEl:#{}
  • 可以取出配置文件中的值:${}

创建实体类 Person

package org.example.pojo;

import org.springframework.beans.factory.annotation.Value;

public class Person {

    @Value("张三")
    private String name;
    @Value("#{20 - 2}")
    private String age;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public Person() {
    }

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

配置类:

package org.example.config;

import org.example.pojo.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MainConfigOfPropertyValue {

    @Bean
    public Person person(){
        return new Person();
    }
}

测试代码:

@Test
public void testPropertyValue(){
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MainConfigOfPropertyValue.class);
    Object person = ac.getBean("person");
    System.out.println(person);
}

测试结果:
Spring 注解驱动开发_属性赋值_第1张图片

二、使用 @PropertySource 加载外部配置文件

在 resources 目录下创建 person.properties

person.nickName=小张三

为实体类 Person 增加 nickName 属性,并增加 @Value 注解

package org.example.pojo;

import org.springframework.beans.factory.annotation.Value;

public class Person {

    @Value("张三")
    private String name;
    @Value("#{20 - 2}")
    private String age;

    @Value("${person.nickName}")
    private String nickName;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public Person() {
    }

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", nickName='" + nickName + '\'' +
                '}';
    }
}

在配置类中,增加 @PropertySource 注解,引入外部配置文件,注意添加编码格式,否则会产生乱码问题.

package org.example.config;

import org.example.pojo.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

@PropertySource(value = "classpath:person.properties", encoding = "UTF-8")
@Configuration
public class MainConfigOfPropertyValue {

    @Bean
    public Person person(){
        return new Person();
    }
}

测试方法不变,测试结果如下:
Spring 注解驱动开发_属性赋值_第2张图片

总结:

  • @Value 可以为属性赋值,其支持三种方式赋值,一是一般赋值,即直接对属性赋值,二是支持 SpEl 表达式赋值,三是可以通过引入外部配置文件进行属性赋值,对于外部配置文件需先通过 @PropertySource 注解引入后,@Value 才能进行赋值。
  • @PropertySource 类似于 Spring 配置文件中的 context:property-placeholder 标签:
<context:property-placeholder location="classpath:person.properties">context:property-placeholder>

你可能感兴趣的:(Spring,spring)