自动连线的Bean在用于全局变量初始化时给出nullpointer异常

时间:2018-06-29 15:55:32

标签: java spring autowired

我有一个表面上看起来很简单的问题,但是我似乎找不到解决方案。我有一个名为SystemTasksService的Service类,它有两个导致问题的方法,下面是代码:

@Service
@PropertySource("classpath:application.properties")
public final class SystemTasksService {

    Map<String, String> getSeedRecordUnderReview(){
        return new HashMap<>();
    }

    Map<String, String> getProduceTutorialUnderReview(){
        return new HashMap<>();
    }

}

然后在另一个类中调用这些方法,如下所示:

private Map<String, String> seedRecordUnderReview = systemTasksService.getSeedRecordUnderReview();

private Map<String, String> produceTutorialUnderReview = systemTasksService.getProduceTutorialUnderReview();

使用@Autowired注解(它是一个Spring Boot应用程序)注入了SystemTaskService,问题就不在这里,因为我可以在此服务上调用其他方法就很好了(只是不用于初始化一个全局变量)与声明的行相同。

有人知道是什么原因造成的吗?

此致

1 个答案:

答案 0 :(得分:0)

好吧,似乎在对象创建过程中,自动装配的部分是在全局变量初始化之后出现的,因此当我在调用自动​​装配的systemListenerService之前,它会给出nullpointer异常。我通过使用@PostConstruct注释来解决此问题,如下所示:

@PostConstruct
private void init(){
    seedRecordsUnderReview = systemTasksService.getSeedRecordsUnderReview();
    produceTutorialsUnderReview = systemTasksService.getProduceTutorialsUnderReview();
}

在构造对象之后,已经自动装配了SystemTaskService Bean,因此调用systemTasksService实例上的方法不再给出nullpointer异常,因为该变量现在引用了自动装配的对象。