接下来我要做的是: 我有调度员接收不同类型的消息并将它们路由到处理程序。 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创建了两次。 我怎么能让他单身?
答案 0 :(得分:0)
如果您未指定Dispacher实施的范围,则默认为 @Dependent 范围。这意味着每个 MessageHandler 都会有一个不同的 Dispacher 实例。
尝试将Dispacher实施的范围设置为 @ApplicationScoped 。
请参阅:Using Scopes。