开关站。如何创建单件服务?

时间:2015-08-17 16:29:49

标签: java switchyard

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

所以我有#34; 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上的方法可以自己注册,因此调度程序可以将消息分发给适当的处理程序。

现在我要做下一个:

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

    @Inject
    @Reference
    Dispatcher dispatcher;

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

}

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

1 个答案:

答案 0 :(得分:0)

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

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

请参阅:Using Scopes

相关问题