文章目录
@value的使用场景
-
bean声明的变量
-
setter方法注入
public static class MyValues { private String timeZone; @Value("#{systemProperties['user.timezone']}") public void setTimeZone(String timeZone) { this.timeZone = timeZone; } }
-
构造方法或其它方法的入参
public class MyValues { private String timeZone; @Autowired public void configure(@Value("#{systemProperties['user.timezone']}") String timeZone) { this.timeZone = timeZone; } }
@value三种使用方法
1. 直接写值@Value(“string value”)
这种方式就是直接把要注入的值字面量写在注解里比较少用
如果要写死在注解里那直接定义变量的时候,写固定即可
2. 占位符@Value(“${myvalue}”)
这种方式最常用 通过属性名 将值注入进来。
如果可能为空,需要设置value注解默认值
用法:@Value(“${unknown.param:defaultValue}”)
3. SpEL表达式@Value(“#{someBean.someValue}”)
SpEL表达式很强大,还能在属性值基础上加以运算等。
如果可能为空,需要设置默认值
用法:@Value(“#{systemProperties[‘unknown’] ?: ‘defaultValue’}”)
占位符形式和SpEL表达式是可以结合使用的,如下:
@Value(“#{‘${listOfValues}’.split(‘,’)}”)
private List valuesList;
@Value数据来源
配置文件
@Value(“${xxxx}”)注解从配置文件读取值的用法
application.yaml文件
user:
userName: LayZhang
sex: male
在使用上述配置文件时,可以直接使用@Value(“${user.userName}”)。
如果@Value(“${user.userName:ZhangL}”),指定了name的值为ZhangL,当从配置文件中获取不到userName时,则userName值为ZhangL
application.properties文件
spring.mail.host = smtp.sina.com
spring.mail.port = 465
spring.mail.protocol = smtps
spring.mail.username = example@sina.com
spring.mail.password = 123
在使用上述配置文件时,可以直接使用@Value(“${spring.mail.username}”)。
常量
@Value("LayZhang")
privat String name;
name值为LayZhang
bean属性,系统属性,表达式
@Value(“#{}”)
//操作系统属性
@Value("#{systemProperties['user.timezone']}")
private String timeZone;
//表达式结果
@Value("#{ T(java.lang.Math).random() * 100.0 }")
private double randomNumber;
//其它bean的属性
@Value("#{propertiesApplication.class.getName()}")
private String className;
参考文献
https://blog.csdn.net/mumuwang1234/article/details/117572281
e()}")
private String className;
# 参考文献
https://blog.csdn.net/mumuwang1234/article/details/117572281
https://www.java265.com/JavaFramework/Spring/202303/6022.html