参考https://blog.youkuaiyun.com/lindyer/article/details/50881152
单例在spring中是默认的,如果要产生多例,则在配置文件的bean中添加scope="prototype";
.为什么用单例多例:
之所以用单例,是因为没必要每个请求都新建一个对象,这样子既浪费CPU又浪费内存;
之所以用多例,是为了防止并发问题;即一个请求改变了对象的状态,此时对象又处理另一个请求,而之前请求对对象状态的改变导致了对象对另一个请求做了错误的处理;
//单例设计模式有两种形式:饿汉式/懒汉式
class Singleton{
// private volatile static Singleton singleton = null; //懒汉式
private static final Singleton singleton = new Singleton(); //饿汉式
private static int count = 0;
private Singleton(){
}
public static Singleton getInstrance(){
/* 懒汉式
if(singleton == null){
synchronized(Singleton.class){
if(singleton == null){
Singleton temp = new Singleton();
singleton = temp;
}
}
}
*/
count++;
return singleton;
}
public void print(){
System.out.println("This is Singleton ,No."+count);
}
}
public class MainEntrance{
public static void main(String args[]){
Singleton singleton = Singleton.getInstrance();
singleton.print();
Singleton singleton2 = Singleton.getInstrance();
singleton2.print();
}
}
This is Singleton ,No.1
This is Singleton ,No.2
利用static关键字的特点,不管外部产生多少个Singlton,但是本质上永远只有唯一的一个实例化对象;饿汉式由于它是程序启动时就已实例化。