我知道这个特定的问题有很多答案,并且我知道可能由于不同的情况而发生这种情况。
但是我想我错了,鉴于我的情况,我不知道所有可能的组合。 让我分享代码片段,以便代码可以说明一切。
控制器类
@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);
}
}
我在第43行的reportGenerator
处将我带到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
类实际上是在创建bean并将其自动装配到ReportFactory
中。 但是,同一个ReportFactory
bean不会自动连接到控制器类。
在完成所有bean初始化之后,在检查调试值时,reportFactory
实例在reportlist
的{{1}}实例中具有空值
但是controller
有两个完全不同的条目,在reportlist
类中从未提及。
有了这些,请在这里帮助我!
P.S。这是一个webapp,我正在使用springBoot。
答案 0 :(得分:0)
针对以后可能会访问此网站的人。
如Mallikarjun所建议,以下更改对我有所帮助。
ReportFactory.java
@Component
public class ReportFactory {
@Resource // It was autowired here
Map<String, ReportGenerator> reportList;
public ReportGenerator<?> getReportGenerator(String reportType) {
return reportList.get(reportType.toLowerCase());
}
}