【问题标题】:Cant inject bean in Processor无法在处理器中注入 bean
【发布时间】:2017-11-10 07:37:26
【问题描述】:

我正在尝试在处理器中使用@BeanInject,但它始终是null

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

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

[更新] 我使用的是 Apache Camel 2.17.2,代码取自 camel-example-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 + "]");
}
}

【问题讨论】:

  • 如果您显示一些代码,并告诉我们您使用的 Camel 版本以及您如何启动/运行 Camel,将会有所帮助
  • 嗨,对不起,是的,我应该这样做。我已经更新了帖子。

标签: apache-camel apache-camel-cdi


【解决方案1】:

如果您使用 CDI,那么您应该更喜欢使用 @Inject 而不是 Camel 的 @BeanInject - 如果您不使用 CDI 或 Spring IoC 等,后者是一个糟糕的替代品,并且仅适用于 Camel bean。

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

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

【讨论】:

  • 感谢克劳斯的帮助。届时我将不得不重新考虑我的方法。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多