首页 > 解决方案 > 如何以编程方式评估注释中使用的表达式(拼写/变量引用)?

问题描述

假设我有用于查找通过 say 注释的方法的用例@Scheduled(cron = "${variable}"),并且我想知道“cron”参数的值。如果我通过反射检查,毫不奇怪,我会发现 value "${variable}"

有人可以分享链接/片段如何评估注释中存在的变量/拼写表达式吗?我找到了一些答案,但都没有奏效。

标签: springspring-boot

解决方案


只是为了扩展@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'}然后为我正确评估了类似字符串。不确定这是否是可行的方法,因为我不太了解春天,但这对我有用。


推荐阅读