java - 如何在单例类 Spring Boot 中使用服务(使用“普通”类连接不同的服务)
问题描述
我想为我的 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();
}
}
以及以下单例:
@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();
//...
}
}
现在我读到这篇文章说NullPointerException
如果你手动实例化你的类(我在单例中这样做)你可能会遇到 - 现在我的问题是:我该如何解决这个问题?我的转换器类需要一些可以在另一个服务中完成的数据库内容。对我来说,这意味着我的班级中不能只有静态成员(因为我使用 Autowired 服务)。甚至可以在“普通类”中连接两个服务吗?
解决方案
现在我读到这篇文章说,如果你手动实例化你的类(我在单例中这样做),你可能会遇到 NullPointerException。
您不必ProjectConverter
自己初始化。您可以将其标记为@Component
Spring 将为您创建此类的 Bean。
代码片段:
@Component
public class ProjectConverter { ... }
推荐阅读
- c++ - 发现显示链表的错误
- amazon-web-services - 在 Java 中创建新的 DynamoDB 表时使用 DynamoDBVersionAttribute
- drupal-8 - 我可以根据视图的结果生成表单吗?
- excel - 循环列表并生成报告
- pyspark - Databricks dbutils.fs.ls 显示文件。但是,读取它们会引发 IO 错误
- powershell - SCCM - 使用 PowerShell 更改现有的部署期限
- c++ - 修改程序入口点时未调用全局变量的构造函数
- go - 在 Golang 中刷新标准输入缓冲区?
- javascript - 一直在 onclick 中响应调用函数
- javascript - 如何读取 csv 文件以将其转换为 Json 对象?