`
安之若素
  • 浏览: 145000 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

spring 的单例模式

阅读更多

原文地址:http://blog.sina.com.cn/s/blog_6151984a0100kfij.html

 

 

  • 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()的都是不同的新实例


分享到:
评论

相关推荐

    浅谈Spring单例Bean与单例模式的区别

    "浅谈Spring单例Bean与单例模式的区别" 本文主要介绍了Spring单例Bean与单例模式的区别,通过对比两者的定义、实现机制和应用场景,帮助读者更好地理解这两种概念的异同。 一、单例模式的定义和实现 单例模式是一...

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

    【Spring 单例模式与线程安全】 在 Spring 框架中,bean 的实例化策略分为两种:单例(Singleton)和多例(Prototype)。单例模式意味着在整个 Spring 容器中,对于一个给定的 bean 定义,只会存在一个实例。这通常...

    大话设计模式--Singleton(单例模式)

    例如,Spring框架中的ApplicationContext就是通过单例模式来管理所有bean的。然而,需要注意的是,过度使用单例可能导致系统设计过于紧密,不利于测试和扩展,因此在设计时应权衡利弊。 总之,单例模式是一种常用的...

    单例多例模式

    在Spring框架中,默认情况下是单例模式。如果要产生多例,则需要在配置文件的bean中添加scope="prototype"。这将告诉Spring框架为每个请求创建一个新的对象实例。 三、为什么要用单例多例? 单例模式的优点是能够...

    简单工厂,代理模式,单例模式demo

    而Spring的单例Bean管理,正是单例模式的体现。 总结来说,简单工厂、代理和单例模式是软件设计中的基础工具,它们帮助我们更好地组织代码,提高代码的可复用性和可维护性。理解和掌握这些模式,对于提升编程技能和...

    单例模式的七种写法

    单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制数据库连接、管理缓存或者全局配置等。下面我们将详细探讨单例模式的七种...

    常见设计模式-单例模式

    在Spring框架中,单例模式的实现主要依赖于IoC容器。Spring通过`singletonObjects`、`earlySingletonObjects`和`singletonFactories`三级注册表来管理单例对象,依次尝试从这三个层次获取单例。这种方式既实现了单例...

    设计模式之单例模式

    单例模式是软件设计模式中的一种经典模式,它在许多实际场景中被广泛使用,尤其在需要...同时,随着编程语言和框架的发展,如Spring框架中的依赖注入,有时可以避免使用单例模式,通过更灵活的方式管理对象的生命周期。

    Java单例模式应用研究.pdf

    Java的Struts、Spring框架,.Net的Spring.Net框架,以及PHP的Zend框架都大量使用了单例模式。 单例模式在实际应用中非常广泛,但对Java程序员来说,设计好单例模式却是一个复杂的过程。在开发中,我们可以根据面向...

    懒汉式单例模式的实现案例

    单例模式的特点:从系统启动到终止,整个过程只会产生一个实例。因为单例提供了唯一实例的全局访问...单例模式常见的应用场景如下:Windows任务管理器、数据库连接池、Java中的Runtime、Spring中Bean的默认生命周期等。

    java之单例模式

    通过Spring的配置文件或者注解来实现单例模式。代码示例如下: ```java @Component @Scope("singleton") public class Singleton { // ... } ``` #### 四、单例模式的应用场景 - **系统配置管理**:对于...

    Android单例模式

    登记式单例模式通常用于需要注册多个单例对象的场景,如Spring框架中的Bean注册。 ##### 实现代码示例 ```java public class Singleton3 { private static Map, Singleton3&gt; map = new HashMap(); private ...

    单例模式demo

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类在整个程序运行期间只有一个实例存在。在Java或Android开发中,单例模式被广泛应用,特别是在需要全局共享资源或者对象的情况下,比如数据库...

    2.单例模式(Singleton)1

    - Spring的Bean:Spring框架中的Bean默认就是单例模式。 **模式的优点和缺点** 优点: 1. 节约系统资源,避免创建不必要的对象。 2. 减少对象的创建和销毁开销,提高效率。 3. 在并发环境中,避免对共享资源的多次...

    Java 单例模式线程安全问题

    在 Spring 框架中,单例模式是默认的作用域,即在整个应用程序生命周期中,只有一个实例存在。为了确保线程安全,Spring 使用 ThreadLocal 来处理一些非线程安全的状态。例如,RequestContextHolder、...

    JAVA单例模式的几种实现方法

    登记式单例模式通常用于类似于Spring框架中的bean管理方式,即在单例类中维护一个容器或注册表,将类名及其对应的实例注册进去,之后可以通过查询注册表来获取相应的单例实例。 ##### 代码示例: ```java import ...

    MVC(单例模式)设计模式

    随着技术的发展,现代框架如Spring MVC提供了更全面的MVC支持,简化了开发过程,同时也提供了更多设计模式的集成,如依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)。 总之,MVC...

    讲解JAVA设计模式中的单例模式

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用,尤其是在需要控制实例化过程,确保一个类只有一个实例时。这个模式的主要目的是限制类的实例化次数,提供全局唯一的访问点,同时可能对性能和...

    41丨单例模式(上):为什么说支持懒加载的双重检测不比饿汉式更优?1

    【单例模式】是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式的主要目的是控制类的实例化过程,确保在任何情况下,对于特定类,都只有一个对象存在。这样的设计通常用于资源管理,比如...

Global site tag (gtag.js) - Google Analytics