当前位置: 首页 > 知识库问答 >
问题:

具有外部条件的spring eventListener

姬坚成
2023-03-14

我需要一个灵活的过滤器来过滤所有代码中的多个EventListener。我可以使用@EventListener(condition=“event.enabled”),但我的过滤器需要分析fooEvent的许多属性。

我希望我可以使用应用程序上下文中的谓词Bean:

@Component
public class FooPredicate implements Predicate<FooEvent> {
   public boolean test(FooEvent event) {...}
}

...

@EventListener(condition="${fooPredicate.test(event)}")
public void handle(FooEvent event) { ... }

但我得到:

org.springframework.expression.spel.SpelEvaluationException: EL1011E: 
   Method call: Attempted to call method 
   test(org.springframework.context.PayloadApplicationEvent) on null 
   context object

是否可以为EventListerns使用外部复杂条件?或者至少定义具有复杂条件的全局侦听器,并在不重复完整条件的情况下继承其行为?

共有1个答案

卫梓
2023-03-14

您使用了错误的定义,因为foodpredicate是一个spring bean,您需要使用“@”而不是“#”,才能将其解析为bean。参见10.5.13 Bean参考

@EventListener(condition="@fooPredicate.test(#event)")
public void handle(FooEvent event) {
    System.out.println();
}
 类似资料:
  • 从SQL查询返回任何结果时遇到一些问题。我很确定这和WHERE条件有关。 我只想返回某些RULE\u ID。我通过表1中的RULE\u名称来标识RULE\u ID。然后,我将TABLE1和TABLE2连接起来,并说如果RULE\u ID的列日期等于20年3月5日,而COLUMN3列不为null,则返回RULE\u ID。 目前,我没有得到这个查询的任何结果,我也不完全清楚为什么。任何帮助都将不胜感

  • 问题内容: 我花了几个小时进行搜索,没有发现与我的案子相似的内容。 让我们假设以下多对多数据模型: 现在,假设我要映射与合同方(单向)有关的 所有 合同。可以使用实体类中的以下注释来完成: 那样就好。 但是我要寻找的是如何映射具有 特定角色的 合同? 从技术上讲,我正在寻找一种在JOIN语句中添加 额外条件 的方法。 到目前为止,在类似的主题中发现了以下想法: 将联接表映射为单独的实体,并使用自定

  • 我们在自己的Maven项目中使用jaxb2-maven-plugin生成一组通用的XSD(数据类型、词汇表等)。在第二个项目中,我需要在编译时引用其中一个或多个XSD,但不希望它们包含在生成的工件中。我创建了一个曲库文件,除了我在其中获取所有内容外,它运行良好。 我仔细研究了插件文档,但它们在细节上少得可怜。有没有办法在不需要每个项目都复制它们的情况下重用常见模式? 谢谢

  • 我想在spring Boot中设置3个配置文件:production,development,test,使用外部配置文件。 应用程序类: AppConfig类:

  • 问题内容: 我有dockerfile 然后我建立它 并运行它。 是否可以从命令行传递参数并将其与Dockerfile中的其他参数一起使用?我的意思是 并以此参数构建。 问题答案: 看起来可能不太干净,但是您可以按照以下方式使用Dockerfile: 然后将图像构建为: 要么

  • 问题内容: 我在基于放置过滤条件的位置的查询中基于过滤条件得到不同的结果。我的问题是: 这些查询之间在技术上有区别吗? SQL标准中是否有任何内容可以解释与查询不同的记录集? 在简化的情况下: 我以为查询将返回相同的结果集,而当它们没有返回时,我感到很惊讶。我使用的是MS SQL2005,在实际查询中,查询1返回了约700行,查询2返回了约1100行,但我无法检测到返回行和排除行的模式。查询1中仍