项目场景
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; // 结果:defaultvalue
2、@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;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论