Я знаю, что на этот конкретный вопрос есть многочисленные ответы, и я знаю о различных сценариях, из-за которых это может происходить.
Но я полагаю, что я не прав, я не знаю всех возможных комбинаций, указанныхмоя ситуация.Позвольте мне поделиться фрагментами кода, чтобы код мог говорить сам за себя.
Класс контроллера
@RestController
public class ReportController {
@Autowired
ReportFactory reportFactory;
//RequestMapping goes here!
public ResponseEntity<Report> getReport() {
ReportGenerator<?> reportGenerator = reportFactory.getReportGenerator("order"); //line# 43
return getSuccessResponse(reportGenerator.getReport(companyGUID, startDate, endDate)); //geting the exception here saying reportGenerator is null!
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private <T> ResponseEntity getSuccessResponse(T response) {
return new ResponseEntity(response, HttpStatus.OK);
}
}
Я получаю reportGenerator
, который находится в строке# 43, который приводит меня к ReportFactory
, который, как вы можете видеть, должен быть с автопроводкой .
ReportFactory.java
@Component
public class ReportFactory {
@Autowired
Map<String, ReportGenerator> reportList;
public ReportGenerator<?> getReportGenerator(String reportType) {
return reportList.get(reportType.toLowerCase());
}
}
Как видите, классс пометкой Component
и другой зависимостью reportList
, этот bean-компонент происходит из класса ниже.
ReportGeneratorConfig.java
@Configuration
public class ReportGeneratorConfig {
@Autowired
BeanFactory factory;
@Bean
public Map<String, ReportGenerator> reportList() {
HashMap<String, ReportGenerator> reportList = new HashMap<String, ReportGenerator>();
reportList.put("order", factory.getBean(OrderReportGeneratorImpl.class));
//OrderReportGeneratorImpl implements ReportGenerator
return reportList; //created the bean which should be autowired wherever needed!
}
}
Когда я запускал код в отладкеЯ вижу, что класс config
фактически создает бин и автоматически подключает его к ReportFactory
.Однако тот же компонент ReportFactory
не подключается автоматически к классу контроллера.
Кроме того, после завершения инициализации компонента экземпляр reportFactory
имеет нулевое значение в reportlist
.экземпляр в controller
, когда я проверяю значение отладки
Но у reportlist
есть две совершенно разные записи, которые нигде не упоминаются, в классе reportFactory
.
С этим Пожалуйста, помогите мне здесь!
PS Это веб-приложение, и я использую springBoot.