一.反射破坏单例模式
- 反射技术过于强大,它可以通过
setAccessible()
来修改构造器,字段,方法的可见性。单例模式的构造方法是私有的,如果将其可见性设为public
,那么将无法控制对象的创建。
public class LazyDoubleCheckSingleton implements Serializable {
private volatile static LazyDoubleCheckSingleton lazyDoubleCheckSingleton = null;
private LazyDoubleCheckSingleton(){}
public static LazyDoubleCheckSingleton getInstance(){
if(lazyDoubleCheckSingleton == null){
synchronized (LazyDoubleCheckSingleton.class){
if(lazyDoubleCheckSingleton == null)
lazyDoubleCheckSingleton = new LazyDoubleCheckSingleton();
}
}
return lazyDoubleCheckSingleton;
}
}
Class aClass = Class.forName(LazyDoubleCheckSingleton.class.getName());
Constructor constructor = aClass.getDeclaredConstructor();
LazyDoubleCheckSingleton newInstance = (LazyDoubleCheckSingleton) constructor.newInstance();