如何使用Spring SPEL解析动态属性名称?

时间:2017-03-10 22:18:33

标签: spring spring-el

我有一个实例变量,其值应该通过查找动态属性名来设置。

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; } 应在disabletrue时评估为filter.Test.disable = true。如果未定义属性,我还想设置默认值false,这通常使用以下语法完成,但在这种情况下我不确定。 false

我收到了错误:

  

引起:java.lang.IllegalArgumentException:无效的布尔值   [filter.BeanExpressionContext.disable]

还尝试@Value("${property:default}")以及@Value("${'dcs.cloud.filter.'#{getClass().getSimpleName()}'.disable'}")#的其他组合无效。

SPEL doc显示无用的$调用来评估表达式,这些表达式使用不同的语法,实际上没有人做过。看起来他们从单元测试中挑选出代码而不是真实的例子。

1 个答案:

答案 0 :(得分:0)

您无法访问以此方式声明表达式的类。 getClass()作用于表达式评估的根对象(在这种情况下为BeanExpressionContext)。

不清楚为什么你不能在这里使用filter.Test.disable(除非,或许你试图在Test被子类化时获得实际的类。)

你不能这样做。

实现EnvironmentAware可能更容易,并通过从环境中获取属性来设置布尔值。