gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:58:48 28 4
gpt4 key购买 nike

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

所以我有实现接口(interface)的“Dispatcher”服务:

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

以及几个实现接口(interface) IMessageHandler 的 bean:

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

IMessage也是一个接口(interface)。

我需要 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 实例。

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

参见:Using Scopes .

关于java - 开关站。如何创建单例服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32055365/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com