Camel SimpleRegistry和DI

时间:2013-01-24 11:49:31

标签: java apache-camel middleware

如果我有OrderHandler界面:

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

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

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

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

我问,因为在测试过程中注入DummyOrderHandler并在生产过程中注入真正的impl会很好(对于单元测试)。提前谢谢!

1 个答案:

答案 0 :(得分:2)

使用时

bean(MyClass.class)

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

但是如果正在调用的方法是静态方法,那么Camel不需要实例化一个对象,因此该类可以是抽象等。您可以将方法名称作为第二个参数提供给pint point哪个方法打电话。

在您的情况下有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)