如何在SpEL中引用ApplicationEventPublisher?

时间:2015-07-21 15:41:04

标签: java spring events spring-el spring-ioc

我想从Spring Web Flow步骤使用ApplicationEventPublisher#publishEvent()发布应用程序事件。发布者通常是应用程序上下文,但除非必要(特别是对于模拟),否则我宁愿不做出这种假设。是否有推荐的方法从SpEL表达式引用发布者对象?

2 个答案:

答案 0 :(得分:1)

我最近遇到过类似的问题。我需要在特定类型的对象上调用SpEL表达式的函数(本质上是自动连接到表达式本身)。不幸的是,看起来SpEL不支持它,所以我不得不在两个选项之间进行选择:

  1. 使用bean引用从表达式调用,并确保在上下文中使用此名称注册bean - @myBean.someMethod()
  2. 实现并注册自定义SpEL函数并按类型注入bean。然后从表达式中调用函数 - #someFunction()
  3. 我认为第二种方法可能更适合您的情况,因为您具有可在整个应用程序中使用的非常通用的功能。您还可以轻松地对函数进行单元测试以及模拟目标ApplicationEventPublisher实例。

    有关功能注册的详细信息,请参阅Spring SpEL documentation

答案 1 :(得分:1)

您不能像使用bean那样将发布者“注入”SpEL表达式。

将自定义bean添加到ApplicationEventPublisherAware的上下文中;添加一个getter并使用@bean.publisher.publishEvent(...)