我想在不同会话实例的bean之间发送事件或消息。
发送事件的服务:
@Service
@Scope("singleton")
public class ServiceA
{
void methodA()
{
...
messanger.post(new ReloadColorsEvent());
}
}
处理事件的Bean:
@Bean
@Scope("session")
public class EventHandler()
{
@PostContruct
void registerEvents()
{
messanger.register(this);
}
void handleFun(ReloadColorEvent reloadColorEvent)
{ ...
}
}
假设我们有2个已登录用户。因此,创建了2个会话(会话1 和会话2 )。第1节和第2节拥有EventHandlers
。
调用methodA
后,将发送事件。
现在,我想在session1和session2的handleFun
对象中通过EventHandler
方法处理此事件。
答案 0 :(得分:1)
关于它的特别之处 - 因为您在EventHandler
注册了messanger
,所以您可以向其发送事件。由于您使用this
注册EventHandler
,因此不应干扰范围代理(如果您使用它们)。
但请注意以下内容:
EventHandler
(例如,在@PreDestroy
方法中)EventHandler
引用其他session
- 使用作用域代理的作用域bean并且您在handleFun()
中使用它们,则会遇到问题。由于handleFun()
在会话上下文之外执行,session
- 代理服务器后面的作用域bean将无法使用