原文地址:http://blog.sina.com.cn/s/blog_6151984a0100kfij.html
单例模式,在spring 中其实是scope(作用范围)参数的缺省设定值
每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例
饿汉模式
|
spring singleton的缺省是饿汉模式:启动容器时(即实例化容器时),为所有spring配置文件中定义的bean都生成一个实例
|
懒汉模式
|
在第一个请求时才生成一个实例,以后的请求都调用这个实例 spring singleton设置为懒汉模式:
<beans default-lazy-init="true">
|
- 另一种和singleton对应的scope值---prototype多实例模式
调用getBean时,就new一个新实例
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 单例模式与线程安全】 在 Spring 框架中,bean 的实例化策略分为两种:单例(Singleton)和多例(Prototype)。单例模式意味着在整个 Spring 容器中,对于一个给定的 bean 定义,只会存在一个实例。这通常...
例如,Spring框架中的ApplicationContext就是通过单例模式来管理所有bean的。然而,需要注意的是,过度使用单例可能导致系统设计过于紧密,不利于测试和扩展,因此在设计时应权衡利弊。 总之,单例模式是一种常用的...
在Spring框架中,默认情况下是单例模式。如果要产生多例,则需要在配置文件的bean中添加scope="prototype"。这将告诉Spring框架为每个请求创建一个新的对象实例。 三、为什么要用单例多例? 单例模式的优点是能够...
而Spring的单例Bean管理,正是单例模式的体现。 总结来说,简单工厂、代理和单例模式是软件设计中的基础工具,它们帮助我们更好地组织代码,提高代码的可复用性和可维护性。理解和掌握这些模式,对于提升编程技能和...
单例模式是软件设计模式中的一种经典模式,用于确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制数据库连接、管理缓存或者全局配置等。下面我们将详细探讨单例模式的七种...
在Spring框架中,单例模式的实现主要依赖于IoC容器。Spring通过`singletonObjects`、`earlySingletonObjects`和`singletonFactories`三级注册表来管理单例对象,依次尝试从这三个层次获取单例。这种方式既实现了单例...
单例模式是软件设计模式中的一种经典模式,它在许多实际场景中被广泛使用,尤其在需要...同时,随着编程语言和框架的发展,如Spring框架中的依赖注入,有时可以避免使用单例模式,通过更灵活的方式管理对象的生命周期。
Java的Struts、Spring框架,.Net的Spring.Net框架,以及PHP的Zend框架都大量使用了单例模式。 单例模式在实际应用中非常广泛,但对Java程序员来说,设计好单例模式却是一个复杂的过程。在开发中,我们可以根据面向...
单例模式的特点:从系统启动到终止,整个过程只会产生一个实例。因为单例提供了唯一实例的全局访问...单例模式常见的应用场景如下:Windows任务管理器、数据库连接池、Java中的Runtime、Spring中Bean的默认生命周期等。
通过Spring的配置文件或者注解来实现单例模式。代码示例如下: ```java @Component @Scope("singleton") public class Singleton { // ... } ``` #### 四、单例模式的应用场景 - **系统配置管理**:对于...
登记式单例模式通常用于需要注册多个单例对象的场景,如Spring框架中的Bean注册。 ##### 实现代码示例 ```java public class Singleton3 { private static Map, Singleton3> map = new HashMap(); private ...
单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类在整个程序运行期间只有一个实例存在。在Java或Android开发中,单例模式被广泛应用,特别是在需要全局共享资源或者对象的情况下,比如数据库...
- Spring的Bean:Spring框架中的Bean默认就是单例模式。 **模式的优点和缺点** 优点: 1. 节约系统资源,避免创建不必要的对象。 2. 减少对象的创建和销毁开销,提高效率。 3. 在并发环境中,避免对共享资源的多次...
在 Spring 框架中,单例模式是默认的作用域,即在整个应用程序生命周期中,只有一个实例存在。为了确保线程安全,Spring 使用 ThreadLocal 来处理一些非线程安全的状态。例如,RequestContextHolder、...
登记式单例模式通常用于类似于Spring框架中的bean管理方式,即在单例类中维护一个容器或注册表,将类名及其对应的实例注册进去,之后可以通过查询注册表来获取相应的单例实例。 ##### 代码示例: ```java import ...
随着技术的发展,现代框架如Spring MVC提供了更全面的MVC支持,简化了开发过程,同时也提供了更多设计模式的集成,如依赖注入(Dependency Injection)和面向切面编程(Aspect-Oriented Programming)。 总之,MVC...
单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用,尤其是在需要控制实例化过程,确保一个类只有一个实例时。这个模式的主要目的是限制类的实例化次数,提供全局唯一的访问点,同时可能对性能和...
【单例模式】是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式的主要目的是控制类的实例化过程,确保在任何情况下,对于特定类,都只有一个对象存在。这样的设计通常用于资源管理,比如...