ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring中的单例模式

2022-01-02 15:01:32  阅读:120  来源: 互联网

标签:Singleton Spring 模式 实例 static 单例 public


Spring中的单例模式

单例模式的介绍

1.1 简介

​ 保证整个应用中某个实例有且只有一个

1.2作用
保证一个类仅有一个实例,并且提供一个访问它的全局访问点。

单例模式的优点和缺点

单例模式的优点:

-单例模式可以保证内存里只有一个实例,减少了内存的开销。
-可以避免对资源的多重占用。
-单例模式设置全局的访问点,可以优化和共享资源的访问。

单例模式的缺点:

-单例模式一般没有接口,扩展困难,如果要扩展,则除了修改原来的代码,没有第二种途径,违背开闭原则。
-在并发测试中,单例模式不利于代码调试。在调试过程中。如果单例中的代码没有执行完,也不能拟生成一个新的对象。
-单例模式的功能代码通常写在一个类中,如果功能设计不合理,则很容易违背单一职责原则。

1. 单例模式的结构

单例模式的主要角色如下。

- 单例类:包含一个实例且能自行创建这个实例的类。
- 访问类:使用单例的类。
其结构如图 1 所示。
package com.qf;
public class SingletonPattern{
    public static void main(String[] args){}
}
class Singleton{
    //因为单例模式保证一个类仅有一个实例
    //所以使用private  static修饰
    private static Singleton singleton;
   	//singlenton是什么开始实例化
    private Singleton(){}
    
    public static Singleton getInstance(){
        return null;
    }
}

饿汉式

即在类加载的时候就进行实例化

package com.qf;
public class SingletonPattern{
    public static void main(String[] args){}
}
class Singleton{
    private static Singleton singleton = new Singlenton();
    private Singleton(){}
    
    public static Singleton getInstance(){
        return singleton;
    }
}

懒汉式

相反在类加载的时候不进行实例化,在第一次使用的时候在进行实例化

package com.qf;
public class SingletonPattern{
    public static void main(String[] args){}
}
class Singleton{
    private static Singleton singleton;
    private Singleton(){}
    //添加synchronized原因是为了防止多次序列化
    //出现多次实例化的原因是,如果A ,B线程同时为空就会出现两次实例化
    public synchronized static Singleton getInstance(){
        if(singleton == null)
            singleton = new Singleton();
        return singleton;
    }
}

Spring中的单例模式

Spring中默认为单例模式

单例模式

单例模式,默认为饿汉单例,可以通过@Lazy注解实现懒汉单例

标签:Singleton,Spring,模式,实例,static,单例,public
来源: https://www.cnblogs.com/niuyalong-com/p/15757482.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有