我想为我的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 { ... }