我想为我的Spring-Boot应用程序运行一些测试,并且在单例中一直遇到NullPointerException。我有以下设置:

@Service
public class ProjectServiceImpl implements ProjectService {
    @Transactional
    @Override
    public void saveProject(ProjectDto projectDto) {
        ProjectEntity projectEntity = ProjectConverter.getInstance().convertDtoToEntityWithDefaultFactory(projectDto);
        entityManager.persist(projectEntity);
        entityManager.flush();
    }
}


以及以下Singleton:

@ComponentScan(myServicePackageImpl)
public class ProjectConverter {

    private static ProjectConverter projectConverterInstance;

    @Autowired
    private FactoryEntityService factoryService;

    public static ProjectConverter getInstance() {
        if (projectConverterInstance == null) {
            projectConverterInstance = new ProjectConverter();
        }
        return projectConverterInstance;
    }

    private ProjectConverter() {
    }

    @Transactional
    public ProjectEntity convertDtoToEntityWithDefaultFactory(ProjectDto projectDto) {
        FactoryEntity defaultFactory = this.factoryService.
                getDefaultFactoryEntity();
    //...
    }
}


现在,我读this article时说,如果手动实例化您的类(我在单例中正在做),则可能会遇到NullPointerException-现在我的问题是:我该如何解决?我得到的Converter类需要一些数据库内容,可以在另一个Service中完成。对我来说,这意味着我不能仅在班级中拥有静态成员(因为我使用了自动装配服务)。甚至有可能在“常规类”中连接两个服务吗?

最佳答案

现在,我读到这篇文章,说您可能会遇到
  NullPointerException如果您手动实例化您的类(我
  在单例中做)。


您不必自己初始化ProjectConverter。您可以将其标记为@Component,Spring会为您创建此类的Bean。

代码段:

@Component
public class ProjectConverter { ... }

09-11 17:58