我有一个公共的final类,它扩展了Configured
并实现了Tool
,但拒绝看到自动装配的变量。此类被传递给静态ToolRunner.run
方法,并且我不确定从增加的复杂度中应该得到什么影响。
我已经将context.getBean
的逻辑转移到一个单独的类中,并且自动装配可以工作,但是引入了更多的错误(使ToolRunner的配置无效)。该单独类的代码是Driver
类中代码的完整副本,并注释为@Component
。为什么Autowired
为一个单独的班级工作,但为什么我不知道这个班级呢?
这是Driver类中的代码:
@Component
public final class Driver extends Configured implements Tool {
private static Driver driver = new Driver();
@Autowired
private Connection connection;
public static void main(String[] args) throws Exception{
int exitCode = ToolRunner.run(new Configuration(),driver, args);
}
@Override
public int run(String[] args) throws Exception{
AbstractApplicationContext context = new AnnotationConfigApplicationContext(HdfsConfig.class);
driver = context.getBean(Driver.class);
\\and it continues till I hit my getConnection NPE
这里是HdfsConfig.class:
@Configuration
@ComponentScan(basePackages = {"shared.folder"}
public class HdfsConfig{
@Bean
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public org.apache.hadoop.conf.Configuration configuration = new Configuration();
\\So on and so on until I return my configuration
我真正想做的是将我的ToolRunner信息和连接对象保留在类中,并填充所有内容并感到满意。我怀疑有关我的Driver
变量的性质正在破坏事物,但原因是逃脱了我脆弱的大脑。