spring - 如何以编程方式评估注释中使用的表达式(拼写/变量引用)?
问题描述
假设我有用于查找通过 say 注释的方法的用例@Scheduled(cron = "${variable}")
,并且我想知道“cron”参数的值。如果我通过反射检查,毫不奇怪,我会发现 value "${variable}"
。
有人可以分享链接/片段如何评估注释中存在的变量/拼写表达式吗?我找到了一些答案,但都没有奏效。
解决方案
只是为了扩展@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'}
然后为我正确评估了类似字符串。不确定这是否是可行的方法,因为我不太了解春天,但这对我有用。
推荐阅读
- c# - AWS Hello World C# Lambda 函数返回 Json 错误
- sql - 创建视图时如何循环
- c++ - 为什么它需要一个右值复制构造函数,即使它不会被调用?
- android - 如何完成一个活动并在另一个活动中指定片段?
- arrays - 使用 react js 合并并显示表中的对象数据数组
- android - 如何在示例应用程序 android 中显示 Boot Flow 消息?
- php - 实时搜索结果显示在新页面上
- azure - 如何从 Web 获取 excel 文件并将其存储在 azure blob 存储中
- git - 带有 git 私有仓库的 Jenkins kubernetes 插件
- c# - 向 csv 阅读器添加错误处理以检测空文件或不正确的数据类型