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

标签 java switchyard

接下来我要做的是: 我有调度程序,它将接收不同类型的消息并将它们路由到处理程序。 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/

相关文章:

java - 从不运行 `if` ,总是 `else`

java - 返回列表中的项目数

java - Jboss 管理控制台在子系统下不显示任何消息传递选项

java - 如何使用 Maven 打包 switchyard 应用程序

java - 在 jpa 绑定(bind) native 查询中使用 switchyard 属性

java - XML 中的 spring 配置文件错误

java - 与 TERYT 集成 - 波兰政府网络服务

Java-对 int 数组进行排序