美文网首页
spring中的单例模式和设计模式中的单例模式的却比

spring中的单例模式和设计模式中的单例模式的却比

作者: 西西_20f6 | 来源:发表于2018-10-29 14:41 被阅读0次

    spring单例bean与设计模式的单例模式的区别在于它们关联的环境不一样。
    单例模式是指在一个JVM进程中仅有一个实例,无论在程序中何处获取该实例,始终都返回同一个对象。
    而spring单例是指一个spring bean容器(ApplicationContext)中仅有一个实例。
    spring的单例bean是与其容器密切相关的,如果在一个JVM进程中有多个spring容器,即使是单例bean,也一定会创建多个实例,

    //  第一个Spring Bean容器
    ApplicationContext context_1 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
    UserBean1 userBean_1 = context_1.getBean("userBean1", UserBean1.class);
    //  第二个Spring Bean容器
    ApplicationContext context_2 = new FileSystemXmlApplicationContext("classpath:/ApplicationContext.xml");
    UserBean1 userBean_2 = context_2.getBean("userBean1", UserBean1.class);
    //  这里绝对不会相等,因为创建了多个实例
    System.out.println(userBean_1 == userBean_2);
    

    applicationContext.xml配置文件

    <!-- 即使声明了为单例,只要有多个容器,也一定会创建多个实例 -->
    <bean id="userBean1" class="demo2.UserBean1" scope="singleton"></bean>
    

    signleton:只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一实例。
    prototype:对这个bean的每次请求都会创建一个新的bean实例,类似于new
    spring bean默认是单例模式。
    在实际应用中,如果将对象的生命周期完全交给spring管理,不在其他地方通过new,反射等方式创建,其实也能达到单例模式的效果。
    单例模式:
    1,只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。
    2,不同的请求可以同时拿这个实例来用,执行实例中不同的方法时,可以同时进行,但是不可以同时执行该实例的同一个方法。其实就是单例模式的线程安全问题。
    3,实例里面不可以有成员变量,因为成员变量共享的话,一个对它修改,另一个再拿来用,用的是修改之后的,会不安全。

    相关文章

      网友评论

          本文标题:spring中的单例模式和设计模式中的单例模式的却比

          本文链接:https://www.haomeiwen.com/subject/xzxbtqtx.html