如何使用 Spring SPEL 解析动态 属性 名称?
How to resolve dynamic property name using Spring SPEL?
我有一个实例变量,其值应通过查找动态 属性 名称来设置。
Class Test {
@Value("#{T(java.lang.String).format('filter.%s.disable', getClass().getSimpleName())}")
private boolean disable;
}
disable
应在 filter.Test.disable = true
时计算为 true
,否则为 false
。如果未定义 属性,我还想设置默认值 false
,这通常使用以下语法完成,但在这种情况下我不确定。
@Value("${property:default}")
我遇到错误:
Caused by: java.lang.IllegalArgumentException: Invalid boolean value
[filter.BeanExpressionContext.disable]
还尝试了 @Value("${'dcs.cloud.filter.'#{getClass().getSimpleName()}'.disable'}")
以及 #
和 $
的一些其他组合,但均无济于事。
SPEL doc 显示无用的 parser.parseExpression
调用来评估表达式,它使用不同的语法,而实际上没有人这样做。看起来他们是从单元测试中挑选代码而不是实际示例。
您无法访问以这种方式声明表达式的 class。 getClass()
作用于表达式求值的根对象(在本例中为 BeanExpressionContext
)。
不清楚为什么你不能在这里使用 filter.Test.disable
(除非,当 Test
是 subclass 时你可能试图获得实际的 class编辑).
你不能那样做。
通过从环境中获取 属性 来实现 EnvironmentAware
和设置布尔值可能更容易。
我有一个实例变量,其值应通过查找动态 属性 名称来设置。
Class Test {
@Value("#{T(java.lang.String).format('filter.%s.disable', getClass().getSimpleName())}")
private boolean disable;
}
disable
应在 filter.Test.disable = true
时计算为 true
,否则为 false
。如果未定义 属性,我还想设置默认值 false
,这通常使用以下语法完成,但在这种情况下我不确定。
@Value("${property:default}")
我遇到错误:
Caused by: java.lang.IllegalArgumentException: Invalid boolean value [filter.BeanExpressionContext.disable]
还尝试了 @Value("${'dcs.cloud.filter.'#{getClass().getSimpleName()}'.disable'}")
以及 #
和 $
的一些其他组合,但均无济于事。
SPEL doc 显示无用的 parser.parseExpression
调用来评估表达式,它使用不同的语法,而实际上没有人这样做。看起来他们是从单元测试中挑选代码而不是实际示例。
您无法访问以这种方式声明表达式的 class。 getClass()
作用于表达式求值的根对象(在本例中为 BeanExpressionContext
)。
不清楚为什么你不能在这里使用 filter.Test.disable
(除非,当 Test
是 subclass 时你可能试图获得实际的 class编辑).
你不能那样做。
通过从环境中获取 属性 来实现 EnvironmentAware
和设置布尔值可能更容易。