1.单例模式
1.1定义:属于一种对象创建模式,能够确保系统中一个类有且只有一个实例
1.2好处:
1.2.1对于频繁使用的对象,可以省略创建对象所花费的时间
1.2.2由于new的次数减少,对内存的使用频率也降低了,减去GC压力
1.3角色
单例类和使用类
实例1:
public class SingleClass3 {
private SingleClass3(){
System.out.println("init SingleClass3...");
}
private static SingleClass3 instance=new SingleClass3();
public synchronized static SingleClass3 getInstance()
{
return instance;
}
}
假设类构造函数初始化时间较慢,则延迟加载:
public class SingleClass {
private static SingleClass instance=null;
private SingleClass()
{
System.out.println("SingleClass Constructor ...");
}
public static synchronized SingleClass getInstance()
{
if (instance==null)
instance=new SingleClass();
return instance;
}
}
但因为使用了同步方法,所以在多线程情况下会变慢,虽然减少了类加载时间,但却因为同步方法导致时间变长,于是引入内部类:
public class SingleClass2 {
private SingleClass2()
{
System.out.println("SingleClass2 Constructor ...");
}
private static class SingleHolder{
private static SingleClass2 instance=new SingleClass2();
}
public static SingleClass2 getInstance()
{
return SingleHolder.instance;
}
}
思考:
如何理解使用内部类来实现单例模式?
静态内部类只有在被调用时才会加载,且类的加载过程是线程保护的所以不存在线程安全问题。而且这个类的实例化是在静态内部类中且使用了final修饰,只能赋值一次,static修饰随着类的加载而加载
使用:
1.配置类
2.常用注解
@Configuration:指定为配置类
@Component:
@Aspect
网友评论