首页 > 解决方案 > 如何在单例类 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 服务)。甚至可以在“普通类”中连接两个服务吗?

标签: javaspringspring-boot

解决方案


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

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

代码片段:

@Component
public class ProjectConverter { ... }

推荐阅读