SpringIOC_对象的多实例和单实例

一个对象在Spring容器中到底是多例还是单例呢?

默认为单例,在scope设置为prototype的时为多例,当为多例时,对象的创建时发生改变,无论lazy-init为什么值,都是在context.getBean();时创建对象

1.ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="helloWorld" class="com.spring.scope.HelloWord"></bean>

    <bean id="helloWorld2" class="com.spring.scope.HelloWord"
    scope="prototype"></bean>

</beans>

2.测试代码

Helloword

package com.spring.scope;

public class HelloWord {

    public HelloWord(){

        System.out.println("create Object");
    }

    public void hello(){
        System.out.println("hello word!");
    }

}

3.测试

package com.spring.scope.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.spring.scope.HelloWord;

public class HelloWordTest {

    /**
     *
     *在Spring容器中的对象,默认情况下是单例的
     *    因为对象是单列的,所以只要在类上声明一个属性,该属性含有数据,那么这个该属性将是全局的 (危险)
     */
    @Test
    public void testScope_Default(){

        //启动Spring容器
        ApplicationContext context=
                new ClassPathXmlApplicationContext("applicationContext.xml");

        //根据id把Spring容器中的bean提取出来
        HelloWord helloWord = (HelloWord) context.getBean("helloWorld");
        HelloWord helloWord2 = (HelloWord) context.getBean("helloWorld");

         System.out.println(helloWord);
         System.out.println(helloWord2);
         //create Object
        //[email protected]
        //[email protected]

    }

    /**
     *
     * 如果scope为prototype,Spring容器产生的对象就是多例
     *
     * 如果一个对象为多例,这个对象在Spring容器中创建时机就会发生改变,则不会再启动的时候创建对象,会再getBean()才创建对象
     *  即:
     *   如果scope为prototype,则无论Lazy-init为什么值,都是在 context.getBean()时创建对象。
     *
     */
    @Test
    public void testScope_Prototype(){
        //启动Spring容器
        ApplicationContext context=
                new ClassPathXmlApplicationContext("applicationContext.xml");

        //根据id把Spring容器中的bean提取出来
        HelloWord helloWord = (HelloWord) context.getBean("helloWorld2");
        HelloWord helloWord2 = (HelloWord) context.getBean("helloWorld2");

         System.out.println(helloWord);
         System.out.println(helloWord2);

      /* create Object
         create Object
         [email protected]
         [email protected]    */

    }

}
时间: 2024-10-06 18:33:04

SpringIOC_对象的多实例和单实例的相关文章

ORACLE11g R2【单实例 FS→单实例FS】

ORACLE11g R2[单实例 FS→单实例FS] 本演示案例所用环境:   primary standby OS Hostname pry std OS Version RHEL6.5 RHEL6.5 DB Version 11.2.0.4 11.2.0.4 db_name stephen stephen db_unique_name stephen standby service_names stephen standby instance_name stephen standby Pri

ORACLE10g R2【单实例 FS→单实例FS】

ORACLE10g R2[单实例FS→单实例FS] 本演示案例所用环境:   primary standby OS Hostname pry std OS Version RHEL5.8 RHEL5.8 DB Version 10.2.0.5 10.2.0.5 db_name stephen stephen db_unique_name stephen standby service_names stephen standby instance_name stephen standby Prim

Oracle Data Guard 单实例到单实例配置(物理standby)

接上一篇oracle dataguard概念篇,现在进行下详细的配置,此次配置的是单实例到单实例,也就是说主库和备库都是基于文件系统的单实例. 主机环境:Red Hat Enterprise Linux Server release 6.3 Rdbms版本:11.2.0.3 其他详细信息如下所示: 需要注意的是,两边的/etc/hosts文件保证都包含对方的ip对应关系 oracle安装的目录是相同的 编辑/etc/hosts,分别添加以下内容 192.168.1.241 db1 192.168

单实例模式和互斥访问

场景说明:在实际的应用开发中,很多人没有注意到一点:在生成单实例的过程中,如果由线程去创建对象的实例,有可能在第一次检测到对象不存在的情况下,准备创建对象,此时由于多线程的缘故,恰巧当前线程被挂起,另一个线程同样执行到这个语句,于是创建一个对象,另一个线程冲睡眠中被唤醒,于是执行了创建对象,现在就有两个对象,完全背离了单实例的设计模式, 解决方法: 1)在主线程还没有创建多线程的时候,创建单实例,但是这里有一个问题:就不会达到延时加载的效果,变成了急剧加载,也就是说预先加载了对象,可能这个对象根

【释疑】tp99、单实例qps

tp99 tp99的定义 tp99 (top percentile 99),指一组数据从小到大排列,处于99%位置的数据的值.例如等差数列range(1,101),tp99=99 tp99优于平均值的地方 相比平均值,tp99多提供了百分位这一维度的信息.通过tp99的变化,我能够知道是有99%比例的请求受到了影响.同样的tp50,tp75也能反应不同百分位的请求变化趋势.有了百分位信息,能够更好的判断服务的状态. 参考文章 性能测试应该怎么做? Why Averages Suck and Pe

Oracle - 给rac创建单实例dg,并做主从切换

一.概述 本文将介绍如何给rac搭建单节点的dg,以及如何对其进行角色转换.预先具备的知识(rac搭建,单实例-单实例dg搭建) 二.实验环境介绍 主库rac(已安装rac,并已有数据库orcl)rac1:192.168.56.11,sid1:orcl1,version:11.2.0.4rac2:192.168.56.12,sid2:orcl2,version:11.2.0.4 从库(已安装单实例数据库软件,无数据库实例)oradg:192.168.56.102,sid:orcldg,versi

双进程守护?内核对象?单实例....?抱歉会进程挂起...抱歉我还有HOOK....

那时候总会问自己,这次写的驱动,用Windbg调试过吗? 写SsdtHook,手动找过吗?写ObjectHook知道对象结构吗?用FS寄存器获取信息?为什么能获取那么多的信息?,_kpcr与他有什么关系?要从那次学习双进程守护说起,也算小半年以前的事情了.不懂互斥体.不懂事件.信号量等机制,你就说用互斥体.事件写双进程守护?科普:当年自学操作系统的时候不懂,慢慢的也就懂了.穿孔器.纸卡带的年代只有程序,为了解决人与CPU的交互效率低下,单批道处理器当年就出现了.但是仍然满足不了需求,这时候多批道

Spring单实例、多线程安全、事务解析

原文:http://blog.csdn.net/c289054531/article/details/9196053 引言: 在使用Spring时,很多人可能对Spring中为什么DAO和Service对象采用单实例方式很迷惑,这些读者是这么认为的: DAO对象必须包含一个数据库的连接Connection,而这个Connection不是线程安全的,所以每个DAO都要包含一个不同的Connection对象实例,这样一来DAO对象就不能是单实例的了. 上述观点对了一半.对的是“每个DAO都要包含一个

【单实例】php

从以上代码中,我们总结出PHP单例模式实现的核心要点有如下三条:1.需要一个保存类的唯一实例的静态成员变量(通常为$_instance私有变量)2.构造函数和克隆函数必须声明为私有的,这是为了防止外部程序new类从而失去单例模式的意义3.必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用PHP单例模式的缺点众所周知,PHP语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收.也就是说,PHP在语言级