У меня есть открытый финальный класс, который расширяет 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
, ломает вещи, но причина в том, что мне не хватает слабого мозга.