gpt4 book ai didi

java - 在 springboot 中使用 Autowiring 获取 NullpointerException (奇怪的场景)

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:19 25 4
gpt4 key购买 nike

我知道这个特定问题有很多答案,并且我知道可能发生这种情况的各种情况。

但我想我错了,鉴于我的情况,我不知道所有可能的组合。让我分享一下代码片段,让代码自己说话。

The controller class

@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!
}
}

When I ran the code in debug, I can see that the config class is infact creating the bean and autowiring the same unto ReportFactory. However the same ReportFactory bean is not getting autowired to the controller class.

在完成所有 bean 初始化之后,当我检查调试值时,reportFactory 实例在 controllerreportlist 实例中具有 null 值

但是 reportlist 有两个完全不同的条目,在 reportFactory 类中从未提及过。

有了这些请帮助我!

P.S. It's a webapp and I am using springBoot.

最佳答案

对于稍后可能会访问此内容的人。

根据 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());
}
}

关于java - 在 springboot 中使用 Autowiring 获取 NullpointerException (奇怪的场景),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53431028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com