1

如果我有一个OrderHandler界面:

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

并且有几个实现(DefaultOrderHandler, ComplexOrderHandler,SpecialOrderHandler等),我如何指定在 Camel 中使用哪一个SimpleRegistry?例如,如果我有以下路线:

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

如何指定 a SimpleRegistry,以及如何DefaultOrderHandler在指定类型处理器时将该注册表配置为“注入” a bean(OrderHandler.class)

我问是因为能够DummyOrderHandler在测试期间注入 a 并在生产期间注入真正的 impl 会很好(对于单元测试)。提前致谢!

4

1 回答 1

2

使用时

bean(MyClass.class)

然后通常类类型(例如 MyClass.class)必须是一个类(不是抽象的,不是接口),因为 Camel 将使用它来实例化一个实例。

但是,如果被调用的方法是静态方法,那么 Camel 不需要实例化对象,因此该类可以是抽象的等。您可以提供方法名称作为第二个参数来确定要调用的方法。

在您的情况下,有 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 的配置方法中,您可以使用

bean(handler)
于 2013-01-25T06:58:18.517 回答