私がやろうとしているのは次のことです。さまざまなタイプのメッセージを受信してハンドラーにルーティングするディスパッチャーがあります。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 回作成されるログが表示されます。どうすれば彼をシングルトンにできますか?