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