我们在Java上使用play2.5。我有一个自定义类,即A类,在其中我通过DI注入了WSClient对象作为自定义类A的属性。我们创建了这个自定义类A的多个实例,因此对于每个新的自定义类A实例,我们都会得到一个新的WSClient实例。我们的要求是定制类A的多个实例中应该只有WSClient的单个实例。因此,我在WSClient属性的上方使用了javax.inject的@Singleton批注。但是它不会创建单例实例,每当我将自定义类A实例化时,都会创建一个新的WSClient实例。有人可以建议一些溶胶在我的自定义类A中创建WSClient的单个实例吗?
下面是代码片段:

class A {

private final WSRequest holder;

@Singleton
public WSClient wsClient = Play.current().injector().instanceOf(WSClient.class);

 A(String url) {
    holder = wsClient.url(url);
  }
}

最佳答案

1)使用Spring框架

2)将wsclient声明为具有默认单例作用域的bean

Declaring Bean

3)使用spring的autowire功能将bean wsclient注入A类

08-06 21:08