【发布时间】:2015-10-05 19:45:08
【问题描述】:
我有一个单例类,它必须作为服务公开给使用接口的其他应用程序。
例如:
public class MySingleSingletonClass{
private static final MySingleSingletonClass THIS_INSTANCE = new MySingleSingletonClass();
private MySingleSingletonClass() {}
public static MySingleSingletonClass getInstance(){
return THIS_INSTANCE;
}
//do other staff
public int methodA(){
//some service
}
}
现在如果我想通过接口暴露这个类的所有服务,这是我的第一次尝试:
public interface MyServiceInterface{
int methodA();
MyServiceInterface getInstanceThroughService();
}
当 MySingleSingletonClass 实现这个接口时:
public class MySingleSingletonClass implements MyServiceInterface{
private static final MySingleSingletonClass THIS_INSTANCE = new MySingleSingletonClass();
private MySingleSingletonClass() {}
public static MySingleSingletonClass getInstance(){
return THIS_INSTANCE;
}
@Override
public int methodA(){
//some service
}
@Override
MyServiceInterface getInstanceThroughService(){
return MySingleSingletonClass.getInstance();
}
}
我发现这种实现有两个问题,
首先如果我使用像 spring 这样的框架,并且我尝试获取 MyServiceInterface 类型的 bean,该类将如何实例化?我读到 spring 仍然会使用反射调用班级的私人承包商。这个实例仍然是单例吗?
第二,如果 Spring 已经给了我实例,我看不出使用实例本身调用 getInstanceThroughService() 方法的意义。感觉这个实现有问题。
谢谢
【问题讨论】:
标签: java spring design-patterns singleton