3

私がやろうとしているのは次のことです。さまざまなタイプのメッセージを受信して​​ハンドラーにルーティングするディスパッチャーがあります。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 もインターフェイスです。

Dispatcher で「登録」メソッドを呼び出して自分自身を登録するには、IMessageHandler のこのインスタンスが必要です。これにより、Dispatcher は適切なハンドラーにメッセージを配信できます。

今のところ、私は次のことを行います:

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

    @Inject
    @Reference
    Dispatcher dispatcher;

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

}

しかし、Dispatcher が 2 回作成されるログが表示されます。どうすれば彼をシングルトンにできますか?

4

1 に答える 1