Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 骆驼简易登记和DI_Java_Apache Camel_Middleware - Fatal编程技术网

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)