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

Java 开关站。如何创建单例服务?,java,switchyard,Java,Switchyard,我想做的是下一步: 我有一个调度器,它将接收不同类型的消息并将它们路由到处理程序。Dispatcher拥有的映射,每个MessageHandler都可以处理其类型的消息,并且每个处理程序都应该在Dispatcher中注册 所以我有“Dispatcher”服务,它实现了接口: public interface Dispatcher{ public void register(IMessageHandler handler); public void handle(IMessage me

我想做的是下一步: 我有一个调度器,它将接收不同类型的消息并将它们路由到处理程序。Dispatcher拥有的映射,每个MessageHandler都可以处理其类型的消息,并且每个处理程序都应该在Dispatcher中注册

所以我有“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”方法来注册自己,以便Dispatcher可以将消息分发给适当的处理程序

现在我做下一步:

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

    @Inject
    @Reference
    Dispatcher dispatcher;

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

}
但我在日志中看到Dispatcher两次创建。
如何使其成为单例?

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

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

请参阅: