4

ドメインモデル内にpub/subシステムを実装する必要があります。GuavaのEventBusを使用することを考えていましたが、インターフェイスとアダプターを使用して、ドメインモデルがそのような実装の詳細を認識しないようにしたいと思います。残念ながら、EventBusがサブスクリプションに注釈を使用すると、このアイデアにモンキーレンチが投げかけられます。

@Subscribeアノテーションを使用せずにハンドラーをサブスクライブする方法はありますか?ドキュメントを見ると、ないようですが、おそらく私が見ていないものがあります。

ありがとう!

4

2 に答える 2

7

グアバチームのメンバーはこちら。

@Subscribeアノテーション付きのハンドラーのみをサブスクライブできることは非常に慎重です-インターフェースやアダプターなどを置き換えるEventBusことを目的としており、それらを補足することを目的としていません-しかし、なぜそれがより多くの実装の詳細を公開すると言うですか?私たちの経験では、通常、公開される詳細は少なくなります。

于 2012-04-18T22:09:34.243 に答える
0

回避策は、ハンドラーを適応させることです。何かのようなもの:

class GuavaHandler<T extends Message> implements Handler<T> {
    private Handler<T> handler;

    public GuavaHandler(Handler<T> handler) {
        this.handler = handler;
    }

    @Override
    @Subscribe
    public void handle(T message) {
        try {
            handler.getClass().getMethod("handle", message.getClass());
            handler.handle(message);
        } catch (NoSuchMethodException ignored) {
            // workaround
        }
    }
}

この特定の実装でのみ属性を定義します。

于 2017-01-01T19:55:52.183 に答える