Допустим, у вас есть следующая настройка:
public class Producer {
public Product produce() { /* Creates some product */ }
}
@Service
public class ProductService {
@Autowired
private Producer producer;
public Product produce() { producer.produce(); }
}
public class Factory {
private static ProductService productService = new ProductService();
public static Product produce() { productService.produce(); }
}
Когда я вызываю Factory.produce(), я получаю NullPointerException, потому что producer имеет значение null. Поскольку producer само по себе не является статическим полем, я надеялся, что, настроив его таким образом, я смогу использовать внедрение зависимостей Springs в статическом контексте. Я ошибся или это просто невозможно?
Для контекста: в моем реальном приложении Factory содержит несколько сервисов, каждый из которых, в свою очередь, содержит несколько производителей. Я выбрал эту структуру, поэтому остальной части моего приложения нужен только доступ к Factory, при этом вся сложность, стоящая за ней, абстрагируется ею.
@jorrin Забыл конструктор. Поскольку это статическая ссылка, ее нельзя внедрить. Это основная проблема, которую я пытаюсь обойти, делая это.




Просто добавьте к конструктору Factory аннотацию @Autowired.
@Component
public class Factory {
private static ProductService productService;
@Autowired
public Factory(ProductService productService) {
Factory.productService = productService;
}
public static Product produce() { productService.produce(); }
}
правильно ли введен продуктService в классе Factory? Или ты просто не поставил?