1

我想在来自不同会话实例的 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 和 session2handleFun的对象中的方法来处理这个事件。EventHandler

4

1 回答 1

1

它有一点特别之处——因为你用 s 注册了你EventHandler的 s messanger,你可以让它向他们发送事件。并且由于您用于this注册EventHandler,因此不应干扰范围代理(如果您使用它们)。

但是,请注意以下几点:

  • 销毁会话时不要忘记取消注册EventHandler(例如,在@PreDestroy方法中)
  • 注意线程安全
  • 如果您EventHandler引用其他session使用范围代理的范围 bean 并且您在内部使用它们,则会遇到问题handleFun()。由于handleFun()在会话上下文之外执行,session代理后面的 -scoped bean 将不可用
于 2012-10-02T17:41:59.560 回答