`

Spring单例模式(singleton)和多例模式(prototype)

 
阅读更多
Spring配置中默认的是单例模式
singleton 单例模式

单例模式,在spring 中其实是scope(作用范围)参数的缺省设定值,
每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例。

单例模式分为饿汉模式和懒汉模式

饿汉模式
spring singleton的缺省是饿汉模式:启动容器时(即实例化容器时),为所有spring配置文件中定义的bean都生成一个实例。
懒汉模式
在第一个请求时才生成一个实例,以后的请求都调用这个实例。
spring singleton设置为懒汉模式:

<beans default-lazy-init="true">


另一种和singleton对应的scope值---prototype多实例模式
调用getBean时,就new一个新实例

singleton和prototype的比较

singleton
xml配置文件:
<bean id="dvdTypeDAO" class="com.machome.hibernate.impl.DvdTypeDAOImpl" />   
测试代码:
        ctx = new ClassPathXmlApplicationContext("spring-hibernate-mysql.xml");
        DvdTypeDAO tDao1 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO");
        DvdTypeDAO tDao2 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO");
运行:        
true
com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333
com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333


说明前后两次getBean()获得的是同一实例,说明spring缺省是单例

prototype
<bean id="dvdTypeDAO" class="com.machome.hibernate.impl.DvdTypeDAOImpl" scope="prototype" />


执行同样的测试代码
运行:
false
com.machome.hibernate.impl.DvdTypeDAOImpl@afae4a
com.machome.hibernate.impl.DvdTypeDAOImpl@1db9852
说明scope="prototype"后,每次getBean()的都是不同的新实例
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    单例多例模式

    单例多例模式是软件设计中的一种重要概念,它们之间的区别和选择对系统的性能和稳定性有着重要的影响。本文将详细讲解单例多例模式的定义、产生方式、使用场景和选择标准。 一、什么是单例多例? 单例(Singleton...

    Spring实战之Bean的作用域singleton和prototype用法分析

    `singleton`提供了单例模式的实现,确保了全局唯一性,适合状态不随时间改变的对象;`prototype`则支持按需创建新实例,适用于需要多个实例且状态可变的情况。理解并正确使用这两个作用域,能够帮助开发者更有效地...

    spring单例引起的线程安全问题

    在 Spring 框架中,bean 的实例化策略分为两种:单例(Singleton)和多例(Prototype)。单例模式意味着在整个 Spring 容器中,对于一个给定的 bean 定义,只会存在一个实例。这通常通过 @Scope("singleton") 注解来...

    通俗易懂spring之singleton和prototype.docx

    总的来说,掌握Spring中的singleton和prototype两种作用域,能够帮助开发者更好地设计和实现面向服务的架构,提高代码的可重用性和可维护性。理解它们的差异,并根据具体需求选择合适的作用域,是每个Spring开发者...

    singleton Bean 创建 prototype Bean

    在Spring框架中,Bean的两种主要作用域是Singleton和Prototype。Singleton Bean表示在整个Spring IoC容器中只有一个实例,而Prototype Bean则表示每次请求都会创建一个新的实例。这两种作用域的使用场景和实现方式都...

    第四章:Spring AOP API 设计模式1

    5. **单例模式(Singleton)**:Spring AOP中的`SingletonTargetSource`保证了每个目标对象只被创建一次,实现了单例模式,确保在整个应用程序中只有一个共享的实例存在,提高了资源利用效率。 6. **适配器模式...

    简单了解spring bean作用域属性singleton和prototype的区别

    Spring Bean作用域属性singleton和prototype的区别详解 Spring Framework中,Bean的作用域属性是指Bean实例的生命周期和作用域。Spring提供了五种作用域:singleton、prototype、request、session和global session...

    Struts中的Action 单例与多例详解

    为了理解这两种模式在Struts2中的实现与适用场景,我们需先了解单例模式和多例模式的基本概念及其在Web应用中的行为特点。 单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例...

    Spring bean为什么默认是单例

    在Spring框架中,Bean的默认作用域是"singleton",即单例模式。这意味着无论有多少次请求获取同一个Bean,Spring容器只会创建一个实例,并且在整个应用生命周期中重复使用这个实例。这种设计决策基于性能和资源管理...

    java设计模式中英文各种版本打包下载 学习设计模式必备材料

    1. 创建型模式(Creational Patterns):如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。它们主要处理对象的创建,帮助...

    java与模式,设计模式的应用

    1. 创建型模式(Creational Patterns):如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。这些模式主要关注对象的...

    spring-aware接口实现与bean作用域(spring多容器层面)

    关于`bean的作用域`,Spring支持多种Bean的作用域,包括单例(Singleton)、原型(Prototype)、会话(Session)和请求(Request)。这些作用域定义了Bean的生命周期和创建行为: 1. **单例(Singleton)**:默认...

    Spring3.0学习文档

    Spring支持两种常见的作用域:单例(Singleton)和原型(Prototype)。单例模式确保一个类只有一个实例,而原型模式则允许每次请求时创建一个新的对象实例。Spring提供了`lazy-init`属性来控制对象的初始化时机,`...

    简单手写springIOC注解模式

    默认情况下,Spring Bean是单例(Singleton)的,但也可以设置为原型(Prototype)或其他作用域。例如,`@Scope("prototype")`表示每次请求都会创建一个新的Bean实例。 3. **@Autowired**: Spring通过此注解实现...

    25个经典的Spring面试问答.docx

    Spring框架还提供了多种Bean作用域,包括 singleton、prototype、request、session、global session等。 Spring框架的单例Bean是否线程安全取决于开发者的实现方式,如果使用了线程安全的方式,那么单例Bean就是...

    springboot prototype设置多例不起作用的解决操作

    总结来说,当在Spring Boot中遇到`@Scope("prototype")`设置后仍无法实现多例的情况,应检查是否正确设置了代理模式。同时,理解Bean的作用域和代理模式对于优化应用程序的性能和数据安全性至关重要。在设计服务时,...

    Tom Spring5源码分析

    - **单例模式**(Singleton): Spring默认情况下将Bean作为单例管理。这意味着每个Bean在Spring容器中只有一个实例,可以通过`ApplicationContext`或其他接口提供的方法访问该实例。这种方式减少了内存消耗,同时...

    spring之xml配置对象创建的三种方式代码

    本文将详细介绍在Spring中利用XML配置创建对象的三种主要方法:单例(Singleton)创建、原型(Prototype)创建和工厂方法(Factory Method)创建。 1. 单例(Singleton)创建: Spring默认的bean生命周期管理是...

    Spring面试题详细讲解

    单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。spring 中的单例模式完成了后半句话,即提供了全局的访问点 BeanFactory。但没有从构造器级别去控制单例,这是因为 spring 管理的是是...

Global site tag (gtag.js) - Google Analytics