我的日常

登录/注册
您现在的位置:论坛 资料库 JAVA开发 > Spring单例模式简介
总共48086条微博

动态微博

查看: 1482|回复: 0

Spring单例模式简介

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2016-07-01 13:06:50 |只看该作者 |倒序浏览
    单例模式的好处:


    Singleton模式主要作用是保证在java应用程序中,一个类Class只有一个实例在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回(garbage collection)。


    单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
    特点:
           1,一个类只能有一个实例
           2,自己创建这个实例
           3,整个系统都要使用这个实例
    解释:
    譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler( 管理所有本地和网络打印队列及控制所有打印工作), 以避免两个打印作业同时输出到打印机中。


    例子:
    第一种形式: 也是常用的形式。   
    public class Singleton {   
    private static Singleton instance = null;   
    private Singleton()
    {   //do something   }   
    //这个方法比下面的有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率   
    public static Singleton getInstance(){   
    if(instance==null){   
    instance = new Singleton();  
     }   
    return instance;  
     }   
    }


    第二种形式:   
    public class Singleton {   
    //在自己内部定义自己的一个实例,只供内部调用   
    private static Singleton instance = new Singleton();  
     private Singleton()
      //do something   }  
    //这里提供了一个供外部访问本class的静态方法,可以直接访问   
    public static Singleton getInstance()
    {   
    return instance;  
     }  
    }
    =======singleton bean和singleton模式区别=============================
    spring
    项目加载的时候bean(一个bean对应某个类)自动创建(初始化,建一个实例),而后是每次调用bean的时候是注入的(不是重新new。。所有整个系统都是这个实例,,而且是spring自动提供的)




    一:对于Spring中实现Singleton模式,是以IOC容器为单位(就是说在这个容器里面bean实现Singleton),换句话说,一个JVM可能有多个IOC容器,而在这个容器里实现了singleton bean,
    而Java中实现Singleton模式而言,只有一个JVM,jvm中某个class只有一个实例
    二:
    singleton模式中,singleton的class在整个JVM中只有一个instance,
    Spring的Bean,你可以一个class配置多个Bean,这个class就有了多个instance。


    这个singleton是指在spring容器中,这个Bean是单实例的,是线程共享的。所以要求这些类都是线程安全的。也就是说,不能出现修改Bean属性的方法,当然除了设值得那些setter。只要满足线程安全,这些bean都可以用singleton。而且我们在绝大多数使用上,也是这样用的,包括dao,service。
    Beanfactory是Spring初始以静态方式载入的,Spring的单例IOC是基于容器级的,所以这你都不用担心与考虑.


    原文 http://my.oschina.net/barter/blog/90173


    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表