我有一个实例变量,其值应该通过查找动态属性名来设置。
int ans1 = getRand();
int ans2 = getRand();
int ans3 = getRand();
public int getRand()
{
done = true;
while (done)
{
tempAns = rand.Next(0, 2);
done = false;
foreach (int i in answersDone)
{
if (tempAns == i)
{
done = true;
}
}
}
answersDone.Add(tempAns);
return tempAns;
}
Class Test {
@Value("#{T(java.lang.String).format('filter.%s.disable', getClass().getSimpleName())}")
private boolean disable;
}
应在disable
和true
时评估为filter.Test.disable = true
。如果未定义属性,我还想设置默认值false
,这通常使用以下语法完成,但在这种情况下我不确定。
false
我收到了错误:
引起:java.lang.IllegalArgumentException:无效的布尔值 [filter.BeanExpressionContext.disable]
还尝试@Value("${property:default}")
以及@Value("${'dcs.cloud.filter.'#{getClass().getSimpleName()}'.disable'}")
和#
的其他组合无效。
SPEL doc显示无用的$
调用来评估表达式,这些表达式使用不同的语法,实际上没有人做过。看起来他们从单元测试中挑选出代码而不是真实的例子。
答案 0 :(得分:0)
您无法访问以此方式声明表达式的类。 getClass()
作用于表达式评估的根对象(在这种情况下为BeanExpressionContext
)。
不清楚为什么你不能在这里使用filter.Test.disable
(除非,或许你试图在Test
被子类化时获得实际的类。)
你不能这样做。
实现EnvironmentAware
可能更容易,并通过从环境中获取属性来设置布尔值。