我正在尝试在处理器中使用 file2=open(r"C:\Users\pc\Desktop\itika study material\cs\student\data.log","rb")
但它总是@BeanInject
。
我可以在null
中访问bean,如果在RouteBuilder
中定义,则可以访问处理器,但如果Processor类在自己的文件中,则不能访问。
这是不支持还是我错过了什么?
[更新] 我正在使用Apache Camel 2.17.2,代码取自camel-example-cdi 下面的代码在第一个处理器中打印对象实例,但不打印第二个处理器。代码在单元测试中运行。
RouteBuilder
处理器
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");
}
}
答案 0 :(得分:2)
如果你正在使用CDI,那么你应该赞成使用@BeanInject
而不是Camel的MyProcessor
- 如果你不使用CDI或Spring IoC等,后者是一个可怜的人替代品,并且只能使用对于骆驼豆。
就您的问题而言,因为您通过新的构造函数自己创建@Inject
实例。然后它的标准Java创建实例而不是CDI或Apache Camel这样做,因此你不能有依赖注入。
您可以使用CDI及其命名bean,然后在您的处理器中进行依赖注入 - 例如使用标准CDI注释。并通过RouteBuilder
将处理器注入(abs(x))
并从您的Camel路由中调用此实例。
答案 1 :(得分:1)
在制作人中,您可以使用注册表中的查找方法
SomeBean someBean = (SomeBean)exchange.getContext().getRegistry().lookupByName("someBean");