我想使用ApplicationEventPublisher#publishEvent()
Spring Web Flow 步骤发布应用程序事件。发布者通常是应用程序上下文,但除非必要(尤其是模拟),否则我宁愿不做出这种假设。是否有推荐的方法从 SpEL 表达式中引用发布者对象?
问问题
588 次
2 回答
1
我最近有类似的问题。我需要在特定类型的对象上从 SpEL 表达式调用函数(本质上是自动连接到表达式本身)。不幸的是,看起来 SpEL 不支持它,所以我不得不在两个选项之间进行选择:
- 使用 bean 引用从表达式调用并确保我在上下文中使用此名称注册 bean -
@myBean.someMethod()
- 实现并注册自定义 SpEL 函数并在那里按类型注入 bean。然后从您的表达式中调用该函数 -
#someFunction()
我认为第二种方法可能更适合您的情况,因为您拥有可以在整个应用程序中使用的非常通用的功能。您还可以对函数进行单元测试以及ApplicationEventPublisher
轻松地模拟目标实例。
有关函数注册的详细信息,请参阅 Spring SpEL文档。
于 2015-07-21T16:21:00.703 回答
1
您不能像使用 bean 那样将发布者“注入”到 SpEL 表达式中。
将自定义 bean 添加到上下文中ApplicationEventPublisherAware
;添加一个吸气剂并使用@bean.publisher.publishEvent(...)
.
于 2015-07-21T17:21:24.280 回答