将类设置为Singleton,而不是每次使用时都注入该类

时间:2019-02-01 09:38:16

标签: java api design-patterns singleton

我有一个在我的项目中用作普通类的类。该类可以访问在该类中注入的其他一些核心类,通过这些核心类我可以调用一些API。因此,当我需要在一个类中调用API时,通常会注入该通用类并使用特定的API。但是,当我在许多其他类中注入通用类时,即使我需要使用其中一个或两个核心类,所有核心类也会被注入。 这是我的普通班

public class ApiService {

private StuResource stuResource;
private VendResource vendResource;
private EduResource eduResource;
private RKEResource rKEResource;
private AleResource aleResource;
private GloResource gloResource;


@Inject
public ApiService(StuResource stuResource, VendResource vendResource,
     EduResource eduResource, RKEResource rKEResource,
     AleResource aleResource, GloResource gloResource) {
  this.stuResource  = stuResource;
  this.vendResource = vendResource;
  this.eduResource = eduResource;
  this.rKEResource = rKEResource;
  this.aleResource = aleResource;
  this.gloResource = gloResource;
}

{Methods for call APIs}

}

因此,我计划使用单例模式,这样我就可以一次创建一个普通类的对象,并且可以在其他类的任何地方使用该对象。 在此实施中帮助我。在这种情况下如何实现单例模式。

1 个答案:

答案 0 :(得分:2)

这根本不是一个好主意-将所有功能放在一个地方。

为每个业务流程创建单独的服务,仅为其提供必需的资源。即

@Component
public class SchoolService {

    private StuResource stuResource;
    private EduResource eduResource;
    private GloResource gloResource;


    @Inject
    public SchoolService(StuResource stuResource, EduResource eduResource, GloResource gloResource) {
        this.stuResource  = stuResource;
        this.eduResource = eduResource;
        this.gloResource = gloResource;
    }

    {Methods for call APIs}

}

然后

@Component
public class PayService {

    private VendResource vendResource;
    private EduResource eduResource;

    @Inject
    public ApiService(VendResource vendResource, EduResource eduResource) {
        this.vendResource = vendResource;
        this.eduResource = eduResource;
    }

    {Methods for call APIs}

}

以此类推。

根据需要,这些类中的每一个都是单例。