Apache camel 无法在处理器中注入bean

Apache camel 无法在处理器中注入bean,apache-camel,apache-camel-cdi,Apache Camel,Apache Camel Cdi,我试图在处理器中使用@BeanInject,但它总是null 我可以访问RouteBuilder中的bean,如果它是在RouteBuilder中定义的,也可以访问处理器中的bean,但如果处理器类在自己的文件中,则不能访问 这是不受支持还是我遗漏了什么 [更新] 我使用的是ApacheCamel 2.17.2,代码取自Camel示例cdi 下面的代码在第一个处理器(而不是第二个)中打印对象实例。代码在单元测试中运行 public class MyRoutes extends RouteBuil

我试图在处理器中使用
@BeanInject
,但它总是
null

我可以访问
RouteBuilder
中的bean,如果它是在
RouteBuilder
中定义的,也可以访问处理器中的bean,但如果处理器类在自己的文件中,则不能访问

这是不受支持还是我遗漏了什么

[更新] 我使用的是ApacheCamel 2.17.2,代码取自Camel示例cdi 下面的代码在第一个处理器(而不是第二个)中打印对象实例。代码在单元测试中运行

public class MyRoutes extends RouteBuilder {
final static Logger LOG = LoggerFactory.getLogger(MyRoutes.class);

@Inject
@Uri("timer:foo?period=5000" )
private Endpoint inputEndpoint;

@Inject
@Uri("log:output")
private Endpoint resultEndpoint;

@BeanInject
private SomeBean someBean;

@Override
public void configure() {
    from("timer:foo?period=500")
        .to("bean:counterBean")
            .process(new Processor(){

                @Override
                public void process(Exchange exchange) throws Exception {
                    LOG.info("[" + someBean + "]");
                }
            })
        .process(new MyProcessor())
        .to("mock:result");
   }
}
处理器

public class MyProcessor implements Processor {
final static Logger LOG = LoggerFactory.getLogger(MyProcessor.class);

@BeanInject
private SomeBean someBean;

@Override
public void process(Exchange exchange) throws Exception {
    LOG.info("In processor [" + someBean + "]");
}
}

如果您使用的是CDI,那么您应该更喜欢使用
@Inject
而不是Camel的
@BeanInject
——如果您不使用CDI或Spring IoC等,后者是穷人的替代品,并且只能用于骆驼豆

就您的问题而言,这是因为您通过新的构造函数自己创建了
MyProcessor
实例。然后是创建实例的标准Java,而不是CDI或ApacheCamel,因此不能进行依赖项注入


您可以使用CDI及其命名bean,然后在处理器中进行依赖项注入——例如使用标准CDI注释。然后通过
@inject
将处理器注入
RouteBuilder
并从Camel路径调用此实例。

如果您使用的是CDI,那么您应该倾向于使用
@inject
而不是Camel的
@BeanInject
——如果您不使用CDI或Spring IoC等,后者是穷人的替代品,而且只适用于骆驼豆

就您的问题而言,这是因为您通过新的构造函数自己创建了
MyProcessor
实例。然后是创建实例的标准Java,而不是CDI或ApacheCamel,因此不能进行依赖项注入


您可以使用CDI及其命名bean,然后在处理器中进行依赖项注入——例如使用标准CDI注释。并通过
@inject
将处理器注入
RouteBuilder
,并从骆驼路径调用此实例。

在producer中,您可以使用注册表中的查找方法

SomeBean someBean = (SomeBean)exchange.getContext().getRegistry().lookupByName("someBean");

在producer中,可以使用注册表中的查找方法

SomeBean someBean = (SomeBean)exchange.getContext().getRegistry().lookupByName("someBean");

如果您展示一些代码,告诉我们您使用的Camel版本,以及如何启动/运行CamelHi,对不起,是的,我应该这样做。我已经更新了帖子。如果你展示一些代码,告诉我们你使用的是什么版本的Camel,以及你如何启动/运行CamelHi,很抱歉,是的,我应该这么做。我已经更新了帖子。谢谢你的帮助。我必须重新考虑我的方法。谢谢你的帮助,克劳斯。那时我将不得不重新考虑我的方法。