使用@Value 和@PropertySource 实现为属性赋值
633 total views, 3 views today
@Value 注解可以为属性值赋值,赋值的方式有多种。
- 基于数值。
- 基于 SpEL 表达式#{}。
- 基于配置文件的。(配置文件中的值都会进入运行的环境变量中的值)
分别举例说明:
基于数值
基于数值的话,最简单。只需要把值写入@Value 注解即可:
@Value(“ 张三”)
private String userName;
基于 SpEL
基于 SpEL 表达式也很简单,只需要写 SpEL 表达式,可以参考 Spring Expression Language(SpEL)速查指南
如:
1 2 |
@Value("#{30-2}") private Integer age; |
基于配置文件
第一步先指定配置文件,通过 PropertySource 注解指定路径。所谓的配置文件,就是存放键值对的 properties 文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@Component @PropertySource(value = { "classpath:/mine.properties"} ) public class User { @Value("${u.name}") private String userName; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } } |
配置文件放在/src/main/resources/mine.properties 这个路径下:
1 2 |
u.name=zhangsan u.age=29 |
注意:所谓的配置参数的值,都是在环境变量中,可以从环境变量中读取到该值。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class Main { public static void main(String[] args) { // 使用Config.class这个配置类 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class); User user = (User) applicationContext.getBean("user"); System.out.println(user.getUserName()); ConfigurableEnvironment environment = applicationContext.getEnvironment(); System.out.println(environment.getProperty("u.name")); //读取环境变量的值 applicationContext.close(); } } |
输出如下:
1 2 |
zhangsan zhangsan |
因此,除了注入 property 文件中设置的值,还可以注入环境变量中的值。
比如:
1 2 |
@Value("${user.name}") private String userName; |
这个${user.name} 注入的是环境变量中的值
1 |
Administrator |
静态变量注入值
1 2 3 4 5 6 7 |
@Component @PropertySource(value = { "classpath:/mine.properties" }) public class User { @Value("${u.staticString}") public static String staticString; } |
配置文件中
1 |
u.staticString=this is a staticString |
Main 方法
1 2 3 4 5 6 7 8 |
public class Main { public static void main(String[] args) { // 使用Config.class这个配置类 AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class); System.out.println(User.staticString); applicationContext.close(); } } |
输出:
1 |
null |
原因在于,Spring 不允许将值直接注入给静态变量 ,只能使用变通的方法:
1 2 3 4 5 6 7 8 9 10 |
@Component @PropertySource(value = { "classpath:/mine.properties" }) public class User { public static String staticString; @Value("${u.staticString}") public void setStaticString(String staticString) { System.out.println("inject staticString...."); User.staticString = staticString; } } |
输出:
1 2 |
inject staticString.... this is a staticString |
原创文章,转载请注明出处!http://www.javathings.top/使用value和propertysource实现为属性赋值/