`

spring的singleton和prototype

 
阅读更多
这两天面试有人问了问题,singleton和prototype的区别?
就这问题参考网上资料,总结一下,以备日后用。


  • 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" />  <wbr><wbr> <wbr><wbr><br></wbr></wbr></wbr></wbr>
测试代码:
 <wbr><wbr> <wbr><wbr>  <wbr><wbr> <wbr><wbr> <wbr><wbr>  <wbr><wbr>ctx = new ClassPathXmlApplicationC<wbr><wbr>ontext("spring-hibernate-mysql.xml");<br> <wbr><wbr> <wbr><wbr>  <wbr><wbr> <wbr><wbr> <wbr><wbr>  <wbr><wbr>DvdTypeDAO tDao1 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO");<br> <wbr><wbr> <wbr><wbr>  <wbr><wbr> <wbr><wbr> <wbr><wbr>  <wbr><wbr>DvdTypeDAO tDao2 = (DvdTypeDAO)ctx.getBean("dvdTypeDAO");<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
运行: <wbr><wbr> <wbr><wbr>  <wbr><wbr> <wbr><wbr> <wbr><wbr>  <wbr><wbr><br>true<br>com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333<br>com.machome.hibernate.impl.DvdTypeDAOImpl@15b0333<br><br>说明前后两次getBean()获得的是同一实例,<span style="word-wrap: normal; word-break: normal; line-height: 18px; font-weight: bold; ">说明spring缺省是单例</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

prototype
<bean id="dvdTypeDAO" class="com.machome.hibernate.impl.DvdTypeDAOImpl" scope="prototype" />
 <wbr><wbr><br></wbr></wbr>
执行同样的测试代码
运行:
false
com.machome.hibernate.impl.DvdTypeDAOImpl@afae4a
com.machome.hibernate.impl.DvdTypeDAOImpl@1db9852
说明scope="prototype"后,每次getBean()的都是不同的新实例




分享到:
评论

相关推荐

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

    总结起来,Spring中的`singleton`和`prototype`作用域是管理Bean生命周期的重要手段。`singleton`提供了单例模式的实现,确保了全局唯一性,适合状态不随时间改变的对象;`prototype`则支持按需创建新实例,适用于...

    通俗易懂spring之singleton和prototype.docx

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

    Spring中的singleton和prototype的实现

    Spring中的singleton和prototype的实现 Spring框架中,bean的作用域是指在容器中bean的实例化和生命周期管理。其中,singleton和prototype是两个最基本的bean作用域。本文将详细介绍Spring中的singleton和...

    singleton Bean 创建 prototype Bean

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

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

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

    spring6pdf详细讲解

    Spring 提供了多种方式来解决循环依赖问题,包括使用 singleton 和 prototype 等范围的 Bean。 在 Spring 中,反射机制是框架的核心技术之一。反射机制使得开发者可以在运行时动态地访问和操作对象的属性和方法。 ...

    传智播客2016spring资料4

    2. **Spring Bean**:介绍Spring容器如何创建、初始化、配置和管理Bean,以及Bean的作用域(如Singleton、Prototype等)。 3. **AOP**:讲解面向切面编程的概念,如何在不修改源代码的情况下,实现对程序行为的统一...

    spring1.2学习心得分享

    创建对象的模式(使用范围):scope控制,可以使用singleton和prototype d.初始化: e.资源释放:仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! ...

    spring ioc和aop原理流程图(详细)

    4. **Bean的作用域**:Spring提供了多种Bean的作用域,如单例(Singleton)、原型(Prototype)、请求(Request)、会话(Session)等,根据不同的需求选择合适的Bean作用域。 5. **Bean的生命周期**:Spring容器对...

    详尽的Spring2.0学习提纲

    4. Bean的作用域:掌握singleton、prototype、request、session等不同作用域的概念及其应用场景。 三、AOP(面向切面编程) 1. AOP基础:理解AOP的基本概念,包括切面、通知、连接点、切入点表达式等。 2. Spring ...

    spring学习心得

    创建对象的模式(使用范围):scope控制,可以使用singleton和prototype d.初始化: e.资源释放:仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! ...

    spring培训第四天

    在这一天的培训中,我们还会涉及Spring的其他关键概念,如Bean的生命周期管理,包括初始化、销毁方法的定义,以及Bean的作用域(singleton、prototype等)。此外,我们可能还会讨论到Spring的事务管理,了解如何使用...

    Spring实例化Bean顺序

    8. **Singleton和Prototype范围**:Singleton Bean在容器启动时只实例化一次,而Prototype Bean每次请求都会创建新的实例。因此,Singleton Bean的实例化顺序与Prototype Bean不同。 9. **FactoryBean**:Spring的`...

    spring bean的生命周期

    了解并掌握Spring Bean的生命周期,可以帮助我们更好地设计和管理应用程序,优化Bean的创建和销毁时机,以及合理地处理Bean间的依赖关系。在实际开发中,可以利用生命周期回调方法进行一些初始化和清理工作,提高...

    spring1.1开发理解

    创建对象的模式(使用范围):scope控制,可以使用singleton和prototype d.初始化: e.资源释放:仅对单例对象有效 (2)IoC概念 Inversion of Control 控制反转或控制转移 Don't Call Me,We will call you! ...

    传智博客Spring框架2016版笔记资料

    此外,还可能涉及Bean的生命周期管理,如初始化、销毁方法的定义,以及bean的作用域(singleton、prototype等)。 day02则可能深入讲解Spring的AOP特性,解释什么是切面、通知、切入点表达式等关键概念,并演示如何...

    spring源码 spring学习

    - **Bean的生命周期**:了解如何通过配置或注解来定义bean的初始化、销毁方法,以及作用域(singleton、prototype等)。 - **AOP代理**:Spring提供了两种代理模式,JDK动态代理和CGLIB代理,它们在何时使用、如何...

    Spring IOC和Spring AOP_spring aop_springIOC

    4. **Bean的作用域**:Spring支持单例(Singleton)、原型(Prototype)、会话(Session)和请求(Request)四种作用域,满足不同场景下的需求。 **Spring AOP** 面向切面编程(AOP)是Spring框架的另一大特色,它...

    Springioc注入Demo

    Spring通过Bean的生命周期管理和作用域(如Singleton、Prototype等)来解决这些问题。对于循环依赖,Spring提供了早期绑定和晚期绑定两种解决策略;对于延迟加载,可以使用`@Lazy`注解;对于工厂方法,可以定义一个...

    spring学习笔记(3.20)

    2. **Spring Bean**:讲解如何定义和配置Bean,以及Bean的作用域(singleton、prototype等)和生命周期管理。 3. **BeanFactory与ApplicationContext**:比较两者之间的差异,解释何时使用BeanFactory以及何时升级...

Global site tag (gtag.js) - Google Analytics