zoukankan      html  css  js  c++  java
  • 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()的都是不同的新实例
  • 相关阅读:
    pecl install swoole 安装php扩展swoole
    RBAC
    mysql数据类型
    ES6——Proxy的this问题
    ES6——Proxy实现链式操作
    ES6——Symbol内置值
    ES6——yield例子
    ES6——Generator的next()方法
    ES6——Thunkify用法
    Linux学习day1
  • 原文地址:https://www.cnblogs.com/zydzyd/p/5629310.html
Copyright © 2011-2022 走看看