@Value的作用是通过注解将常量、配置文件中的值、其他bean的属性值等注入到变量中,作为变量的初始值。
public class Dog {
@Value("博美")
private String name;
@Value("2")
private int age;
public Dog() {
}
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
配置类如下
@Configuration
public class TestConfig {
@Bean
public Dog dog(){
return new Dog();
}
}
运行测试
public class TestMain {
@Test
public void test(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(TestConfig.class);
Object dog = applicationContext.getBean("dog");
System.out.println(dog);
}
}
运行结果为
Dog{name='博美', age=2}
@Value注解可以通过Spring EL进行简单的运算
public class Dog {
@Value("博美")
private String name;
@Value("#{3*2}")
private int age;
...
}
@Value注解可以通过Spring EL调用静态类及常量
@Value("博美")
private String name;
@Value("#{T(Math).random()}")
private int age;
...
}
@Value注解可以通过Spring EL调用其他Bean的值
@Configuration
public class TestConfig {
@Bean
public Dog dog(){
return new Dog();
}
@Bean("jinMao")
public Dog dog2(){
return new Dog("金毛",5);
}
}
public class Dog {
@Value("#{jinMao.name}")
private String name;
@Value("#{jinMao.age}")
private int age;
//省略构造方法、setter、getter及toString方法
...
}
@Value注解可以通过Spring EL使用简单的逻辑判断
public class Dog {
@Value("#{jinMao.name}")
private String name;
@Value("#{jinMao.age> 2 ? 1 : 3}")
private int age;
@Value("#{jinMao.name eq '博美'}")
private boolean isSales;
//省略构造方法、setter、getter及toString方法
...
}
@Value注解可以通过Spring EL使用正则
public class Dog {
@Value("#{jinMao.name}")
private String name;
@Value("#{jinMao.age> 2 ? 1 : 3}")
private int age;
@Value("#{jinMao.age matches '\\d+' }")
private boolean isDigit;
//省略构造方法、setter、getter及toString方法
...
}
新建一个dog.properties文件
dog.name=柯基
dog.age=1
配置类
@Configuration
@PropertySource(value = "classpath:dog.properties",ignoreResourceNotFound = true,encoding = "UTF-8")
public class TestConfig {
@Bean
public Dog dog(){
return new Dog();
}
}
在使用PropertySource,可能会出现乱码,我们可以使用encoding指定编码类型为 UTF-8
Dog类
public class Dog {
@Value("${dog.name}")
private String name;
@Value("${dog.age}")
private int age;
...
}
运行测试类,打印结果为
Dog{name='柯基', age=1}
@PropertySource注解将properties配置文件中的值存储到Spring的 Environment中,Environment接口提供方法去读取配置文件中的值,参数是properties文件中定义的key值。
接下来我们去验证一下是否存在我们的环境变量中
public class TestMain {
@Test
public void test(){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(TestConfig.class);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
System.out.println(environment.getProperty("dog.name"));
System.out.println(environment.getProperty("dog.age"));
}
}
打印结果为
柯基
1