我想在Map器类中注入一个依赖项。
Map器类示例:
public class Mapper() {
private MyInterface myObject;
public void map() {
// Map code here
}
}
我想使用spring将myinterface的实现注入myobject。直接使用spring是不可能的,因为hadoop框架本身示例化了mapper对象。
唯一的方法是将configure函数添加到mapper类中,然后执行以下操作:
public void configure() {
// create application context here, then
myObject= (MyInterface) applicationContext.getBean("bean.myImplementation1");
}
有没有更好的办法?
提前谢谢
3条答案
按热度按时间ht4b089n1#
看了几本关于hadoop的书。似乎,“configure()”方法是唯一的方法。
已经在问题中添加了代码
ecbunoof2#
在spring中注入的默认方式是基于对象的类型。在您的情况下,您不能使用这种注入,因为您有两个不同的实现相同的接口。然后在您的例子中,您可以使用以下策略来注入这些对象(我支持您将xml配置添加到spring)
然后在你的界面上你可以使用
9lowa7mx3#
这在hadoop上是一个常见的难题,因为mapper和reducer是由框架交给您的。我发现最好从setup()方法调用一个轻量级di框架。阅读我关于hadoop依赖注入的博客文章。我编写了一个名为spit di的类来处理di,它在github上可用,并使用jsr-250@resource注解进行注入。
结果是这样的: