如何用程序计算注释中使用的表达式(spel/variable-reference)



假设我有通过Say@Scheduled(cron = "${variable}")注释的查找方法的用例,我想知道"cron";参数如果我通过反思进行检查,毫不奇怪,我会发现有值"${variable}"

有人能分享如何评估注释中存在的变量/spel表达式的链接吗?我找到了一些答案,但都不起作用。

只是为了扩展@crizzis的答案,也许可以填补缺失的部分。

首先你需要注射/自动连接ConfigurableBeanFactory beanFactory;。看看ExpressionValueMethodArgumentResolver及其父AbstractNamedValueMethodArgumentResolver的实现,在我看来,完成变量替换和拼写的完整代码还需要一行:

BeanExpressionResolver beanExpressionResolver = beanFactory.getBeanExpressionResolver();    
String expressionWithSubstitutedVariables = beanFactory.resolveEmbeddedValue(expression);
Object resultWithResolvedSPEL = beanExpressionResolver.evaluate(expressionWithSubstitutedVariables, new BeanExpressionContext(beanFactory, null));

然后像#{!${some-boolean-variable} ? 'a' : 'b'}这样的字符串对我来说是正确的评估。不确定这是否是正确的方法,因为我不太了解spring,但这对我有效。

我相信有几种方法,但最简单的可能是:

beanFactory.getBeanExpressionResolver().evaluate(
"${variable}", 
new BeanExpressionContext(beanFactory, null))

最新更新