是否可以从另一个变量设置@Value
例如。
System properties : firstvariable=hello ,secondvariable=world
@Value(#{systemProperties['firstvariable'])
String var1;
现在我希望var2
与var1
连接并依赖于它,类似于
@Value( var1 + #{systemProperties['secondvariable']
String var2;
public void message(){ System.out.printlng("Message : " + var2 );
不,你不能那样做,否则你会得到The value for annotation attribute Value.value must be a constant expression
.
但是,您可以通过以下方法实现相同的目标
在您的媒体资源文件中
firstvariable=hello
secondvariable=${firstvariable}world
然后将值读取为
@Value("${secondvariable}")
private String var2;
System.out.println("Message : " + var2 )
的输出将是Message : helloworld
。
作为问题,请使用预定义的系统属性变量与 EL 过期。
我的猜测是,意思是使用 java 系统属性(例如 -D 选项(。
@value接受您可以使用的 el 表达式
@Value("#{systemProperties['firstvariable']}#systemProperties['secondvariable']}")
private String message;
你说
现在我想让 var2 与 var1 连接起来,并且 依赖它
请注意,在这种情况下,更改 var2 不会影响消息,因为 初始化 Bean 时设置消息
就我而言(同时使用 Kotlin 和 Springboot(,我也必须转义"$"字符。否则,Intellij IDEA会给出编译时错误:
实现给出错误:
@Value("${SCRIPT_PATH}")
private val SCRIPT_PATH: String = ""
错误:批注参数必须是编译时常量
溶液:
@Value("${SCRIPT_PATH}")
private val SCRIPT_PATH: String = ""