3

接下来我要做的是:我有调度程序,它将接收不同类型的消息并将它们路由到处理程序。Dispatcher 持有 map of ,每个 MessageHandler 都可以处理自己的消息类型,每个 handler 都应该在 dispatcher 中注册。

所以我有实现接口的“调度程序”服务:

public interface Dispatcher{
   public void register(IMessageHandler handler);
   public void handle(IMessage message);
}

和几个实现接口 IMessageHandler 的 bean:

public interface IMessageHandler{
   public void handle(IMessage message);
}

IMessage 也是一个接口。

我需要 IMessageHandler 的这个实例来调用 Dispatcher 上的“register”方法来注册自己,以便调度程序可以将消息分发给适当的处理程序。

现在我接下来做:

@Service(IMessageHandler.class)
public class MessageBHandler implements IMessageHandler {

    @Inject
    @Reference
    Dispatcher dispatcher;

  @PostConstruct
  public void registerMyself(){
     dispatcher.register(this);
  }
...

}

但是我在日志中看到 Dispatcher 被创建了两次。我怎样才能让他单身?

4

1 回答 1

0

如果您未指定 Dispacher 实现的范围,则默认为@Dependent范围。这意味着每个MessageHandler将有一个不同的Dispacher实例。

尝试将 Dispacher 实现的范围设置为@ApplicationScoped

请参阅:使用范围

于 2016-12-08T18:45:55.850 回答