1

OrderHandlerインターフェイスがある場合:

public interface OrderHandler {
    public void handle(Order order);
}

そして、いくつかの実装(、、、DefaultOrderHandlerなど)がありますが、Camelで使用する実装を指定するにはどうすればよいですか?たとえば、次のルートがある場合:ComplexOrderHandlerSpecialOrderHandlerSimpleRegistry

from("direct:pointA")
    .bean(OrderHandler.class)
    .to("direct:pointB");

タイプのプロセッサを指定するときにSimpleRegistry、を「注入」するようにレジストリを構成するにはどうすればよいですか?DefaultOrderHandlerbean(OrderHandler.class)

DummyOrderHandlerテスト中に(ユニットテストの場合) 、本番中に実際のimplを注入できると便利なので、お願いします。前もって感謝します!

4

1 に答える 1

2

使用時

bean(MyClass.class)

次に、通常、クラス タイプ (MyClass.class など) はクラス (abstract でもインターフェイスでもない) である必要があります。これは、Camel がそれを使用してインスタンスをインスタンス化するためです。

ただし、呼び出されているメソッドが静的メソッドである場合、Camel はオブジェクトをインスタンス化する必要がないため、クラスを抽象化することができます。メソッド名を 2 番目のパラメーターとして指定して、呼び出すメソッドを特定できます。

あなたの場合、インターフェースの3つの異なる実装があります。使用するタイプを指定する必要があります

bean(MyImpl.class)

または、Bean を名前で参照してレジストリを検索するか、オブジェクト インスタンスを提供します。次に例を示します。

OrderHandler handler  = new DummyOrderHandler;
...
bean(handler)

単なる Java コードとして、RouteBuilder を使用している場合は、OrderHandler の getter/setter を使用して、RouteBuilder で目的の実装を設定できます。

RouteBuilder myBuilder = new MyRouteBuilder();
myBuilder.setOrderHandler(new DummyOrderHandler());
...

そして、 MyRouteBuilder の configure メソッドで使用できます

bean(handler)
于 2013-01-25T06:58:18.517 に答える