Java 骆驼简易登记和DI
如果我有一个Java 骆驼简易登记和DI,java,apache-camel,middleware,Java,Apache Camel,Middleware,如果我有一个OrderHandler接口: public interface OrderHandler { public void handle(Order order); } 并且有几个实现(DefaultOrderHandler,ComplexOrderHandler,speciallorderhandler,等等),我如何指定在Camel的SimpleRegistry中使用哪一个?例如,如果我有以下路线: from("direct:pointA") .bean(Order
OrderHandler
接口:
public interface OrderHandler {
public void handle(Order order);
}
并且有几个实现(DefaultOrderHandler
,ComplexOrderHandler
,speciallorderhandler
,等等),我如何指定在Camel的SimpleRegistry
中使用哪一个?例如,如果我有以下路线:
from("direct:pointA")
.bean(OrderHandler.class)
.to("direct:pointB");
当我指定类型为bean(OrderHandler.class)
的处理器时,如何指定SimpleRegistry
,以及如何将该注册表配置为“注入”一个DefaultOrderHandler
我这样问是因为(对于单元测试而言)能够在测试期间注入dummyrderhandler
,并在生产期间注入真正的impl会很好。提前谢谢 使用时
bean(MyClass.class)
然后,通常类类型(例如MyClass.class)必须是类(不是抽象的,不是接口),因为Camel将使用它来实例化实例
但是,如果正在调用的方法是静态方法,那么Camel不需要实例化对象,因此类可以是抽象的,等等。您可以将方法名称作为第二个参数提供给pint,指出要调用的方法
在您的例子中,有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)