如何在单例类Spring Boot中使用服务(将不同的服务与“常规”类连接)

时间:2018-12-18 00:59:59

标签: java spring 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();
    }
}

以及以下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中完成。对我来说,这意味着我不能仅在班级中拥有静态成员(因为我使用了自动装配服务)。甚至有可能在“常规类”中连接两个服务吗?

1 个答案:

答案 0 :(得分:3)

  

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

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

代码段:

@Component
public class ProjectConverter { ... }