【发布时间】:2015-08-24 21:49:10
【问题描述】:
这里我有一个单例,我想将它注入到我的应用程序中
@Singleton
@Path("singleton-bean")
public class MyContext {
private MyContext() {
instances++;
}
private static MyContext instance;
public static MyContext getInstance(){
if (instance == null)
instance = new MyContext();
return instance;
}
public static int instances = 0;
}
我是这样注册的:
@ApplicationPath("webresources")
public class ApplicationConfig extends Application {
@Override
public Set<Object> getSingletons() {
final Set<Object> singletons = new HashSet<>();
singletons.add(MyContext.getInstance());
return singletons;
}
//.....
最后,我打印请求中的单例数:
@Path("foo")
public class Foo {
@Inject
public MyContext message;
@GET
public String index() throws UnknownHostException {
return String.format("%s number of instances: %s", message, MyContext.instances);
}
它返回两个实例。我了解 Jersey 使用反射来访问私有构造函数并创建另一个实例。为什么会发生这种情况以及如何防止这种情况发生?
【问题讨论】:
标签: java dependency-injection jersey singleton jersey-2.0