项目场景
spring boot中静态变量想使用@value注入值:
在application.properties或application.yml中定义topic名称:
# application.properties test.name=测试
@value("${test.name}")
public static string name;这时候打印发现是空的, 通过上例可以看出,使用@value注解修饰静态属性,启动项目时不会报错,但是也不会给该静态属性设置值。
解决方案
可以通过set方法给静态属性设置配置文件中的属性值。
@service
public class testservice {
private static string name;
@value("${test.name}")
public void setname(string param) {
name = param;
}
public static string getname() {
return name;
}
}注解说明
- @value("${}"):可以获取对应属性文件中定义的属性值。
- @value("#{}"):表示 spel 表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法。
1、@value("${}")使用示例
直接将字符串赋值
@value("hello world")
private string name;从属性文件中获取值
@value("${test.name}")
private string name; // 结果:测试设置默认值
@value("${test.name:defaultvalue}")
private string name; // 结果:defaultvalue2、@value("#{}")使用示例
注入操作系统属性
@value("#{systemproperties['os.name']}")
private string osname; // 结果:windows 10注入表达式结果
// 生成一个随机数
@value("#{ t(java.lang.math).random() * 1000.0 }")
private double randomnumber;
// 使用 system 类获取系统环境变量 path
@value("#{ t(java.lang.system).getenv('path') }")
private string path;注入其他bean属性
// 其他bean
@component
public class otherbean {
@value("otherbean的name属性")
private string name;
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
}
// 用法
@component
public class mybean {
@value("#{otherbean.name}")
private string fromanotherbean;
// ...
}注意,其他 bean 使用 @component 时,如果没有指定名称,则默认为类名首字母小写,如:otherbean 。
当然我们也可以使用 @component("myname") 形式,指定其他 bean 的名称,此时,访问则需要使用 @value("#{myname.name}")。如下:
// 其他bean,自定义名称为 mybeans
@component("mybeans")
public class otherbean2 {
@value("otherbean的name属性")
private string name;
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
}
// 用法
@component
public class mybean {
@value("#{mybeans.name}")
private string fromanotherbean2;
// ...
}注入资源
// 注入文件资源
@value("classpath:props/application.properties")
private resource fileresource;
// 注入url资源
@value("https://www.hxstrive.com")
private resource urlresource;总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论