如何在 SpEL 中引用 ApplicationEventPublisher?
How do I reference the ApplicationEventPublisher in SpEL?
我想使用来自 Spring Web Flow 步骤的 ApplicationEventPublisher#publishEvent()
发布应用程序事件。发布者通常是应用程序上下文,但除非必要(特别是模拟),否则我宁愿不做这样的假设。是否有推荐的方法从 SpEL 表达式引用发布者对象?
我最近遇到了类似的问题。我需要在特定类型的对象上从 SpEL 表达式调用函数(本质上是自动连接到表达式本身)。不幸的是,SpEL 似乎不支持它,所以我不得不在两个选项之间做出选择:
- 使用 bean 引用从表达式调用并确保我在上下文中使用此名称注册 bean -
@myBean.someMethod()
- 实现并注册自定义 SpEL 函数并按类型注入 bean。然后从你的表达式中调用函数 -
#someFunction()
我认为第二种方法可能更适合您的情况,因为您拥有可以在整个应用程序中使用的非常通用的功能。您还可以对函数进行单元测试并轻松模拟目标 ApplicationEventPublisher
实例。
函数注册详情请参考Spring SpEL documentation。
您不能 "inject" 发布者进入 SpEL 表达式,就像使用 bean 一样。
将自定义 bean 添加到 ApplicationEventPublisherAware
的上下文中;添加 getter 并使用 @bean.publisher.publishEvent(...)
.
我想使用来自 Spring Web Flow 步骤的 ApplicationEventPublisher#publishEvent()
发布应用程序事件。发布者通常是应用程序上下文,但除非必要(特别是模拟),否则我宁愿不做这样的假设。是否有推荐的方法从 SpEL 表达式引用发布者对象?
我最近遇到了类似的问题。我需要在特定类型的对象上从 SpEL 表达式调用函数(本质上是自动连接到表达式本身)。不幸的是,SpEL 似乎不支持它,所以我不得不在两个选项之间做出选择:
- 使用 bean 引用从表达式调用并确保我在上下文中使用此名称注册 bean -
@myBean.someMethod()
- 实现并注册自定义 SpEL 函数并按类型注入 bean。然后从你的表达式中调用函数 -
#someFunction()
我认为第二种方法可能更适合您的情况,因为您拥有可以在整个应用程序中使用的非常通用的功能。您还可以对函数进行单元测试并轻松模拟目标 ApplicationEventPublisher
实例。
函数注册详情请参考Spring SpEL documentation。
您不能 "inject" 发布者进入 SpEL 表达式,就像使用 bean 一样。
将自定义 bean 添加到 ApplicationEventPublisherAware
的上下文中;添加 getter 并使用 @bean.publisher.publishEvent(...)
.