//从ApplicationContext 中取 bean
ApplicationContext ac = new ClassPathXmlApplicationContext ( "com/hsp/beans.xml" ) ;
ac.getBean("beanId");
  当我们去实例化beans.xml,该文件中配置的 bean 就被实例化(不论你用还是不用,bean对象都在那),而且该对象是singleton单例的。(每个bean都有scope属性,可以人为的设置任意的bean为单态的,scope="singleton",scope="prototype"则每获得一个bean都是全新的bean)。
  优点:预先加载,使用的时候速度快。
  缺点:耗内存,所有的bean都被实例化了,但是可能只用到其中的很少。
 
//从bean工厂取bea n
BeanFactory factory = new XmlBeanFactory( new ClassPathResource ( "com/hsp/beans.xml" ) ) ;
factory.getBean("beanId");
  如果使用 BeanFactory 去取bean ,当你只是实例化该容器,那么容器里的 beans 不会马上被实例化,只有当你使用getBean某个bean时,才会实时的创建。
  优点:节约内存。
  缺点:速度慢。
关于选择:只有在移动项目里使用beanfactory,大多数项目(90%)使用的都是ApplicationContext,因为可以提前加载,只是浪费点内存。
  有一点需要注意,用ApplicationContext实例化xml里的bean默认都是singleton单例的。也就是说每个bean都只有一个实例对象,不论调用多少次getBean()方法,不论有多少 ref 依赖,spring容器中都只有一个bean实例。 但是当人为设置它的scope="prototype"的时候,它就不是单例了,而且在加载xml文件的时候也不会实例化了(因为当你把它设置为prototype原型的时候,spring框架不知道你需要对这个bean创建多少个实例,所以它索性就不实例了)。
附上Spring API对 Spring bean 作用域的解释:
Bean简介:
在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。 而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。
Bean的作用域:
  创建一个bean定义,其实质是用该bean定义对应的类来创建真正实例的“配方(recipe)”。把bean定义看成一个配方很有意义,它与class很类似,只根据一张“处方”就可以创建多个实例。
你不仅可以控制注入到对象中的各种依赖和配置值,还可以控制该对象的作用域。这样你可以灵活选择所建对象的作用域,而不必在Java Class级定义作用域。Spring Framework支持五种作用域(其中后三种属性只能用在基于web的Spring ApplicationContext,singgleton、prototype可以用于桌面开发)。
  1、singleton:当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。
  注意:Singleton作用域是Spring中的缺省作用域。要在XML中将bean定义成singleton,可以这样配置:
    <bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl" scope="singleton">
  2、prototype:一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。
  根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。


Spring 中 ApplicationContext 和 BeanFactory 的区别,以及 Spring bean 作用域的更多相关文章

  1. Spring 中 ApplicationContext 和 BeanFactory 的区别

    //从ApplicationContext 中取 bean ApplicationContext ac = new ClassPathXmlApplicationContext ( "com ...

  2. Spring中ApplicationContext和beanfactory区别---解析二

    一.BeanFactory 和ApplicationContext Bean 工厂(com.springframework.beans.factory.BeanFactory)是Spring 框架最核 ...

  3. Spring中ApplicationContext和beanfactory区别---解析一

    BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...

  4. Spring中ApplicationContext和beanfactory区别

    BeanFacotry是spring中比较原始的Factory.如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring的许多插件,如AOP ...

  5. spring入门——applicationContext与BeanFactory的区别

    我们知道从applicationContext容器对象中如何获取Bean了,其实spring框架还有另外一种获取bean的方法:BeanFactory代码如下: BeanFactory factory ...

  6. Spring中FactoryBean与BeanFactory的区别

    版本:spring-framework-4.1 一概述 BeanFactory 与 FactoryBean的区别, 两个名字很像,面试中也经常遇到,所以容易搞混,现从源码以及示例两方面来分析. 二.源 ...

  7. Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别

    Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别 一.概述 在项目中遇到加载不到Spring配置文件,简单分析后,写此 ...

  8. Spring中ApplicationContext加载机制和配置初始化

    Spring中ApplicationContext加载机制.        加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet.        ...

  9. Spring中ApplicationContext对事件的支持

    Spring中ApplicationContext对事件的支持   ApplicationContext具有发布事件的能力.这是因为该接口继承了ApplicationEventPublisher接口. ...

随机推荐

  1. 算法(1):查找&排序

    算法(Algorithm):一个计算过程,解决问题的方法 程序 = 数据结构+算法 时间复杂度: 当算法过程中出现循环折半的时候,复杂度式子中会出现 O(logn) 时间复杂度小结: 1. 时间复杂度 ...

  2. Sumdiv(poj1845)

    题意:求A^B的因子的和. /* 首先将A分解 A=p1^a1*p2^a2*...*pn*an A^B=p1^a1B*p2^a2B*...*pn*anB 因子之和sum=(1+p1+p1^2+...+ ...

  3. msp430入门学习12

    msp430的定时器--Timer_A(定时器A) msp430入门学习

  4. Linux下汇编语言学习笔记53 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  5. ZOJ3953 ZJU2017校赛(贪心)

    题意:给出n个区间,求至少删掉多少个区间使得不存在区间a, b, c 两两相交    (定义两个区间相交是,区间[l1, r1]和区间[l2, r2]相交,当且仅当存在一个数x,l1<=x< ...

  6. 使用异步委托执行线程(delegate)

    由于异步委托产生的线程与应用程序主线程是分开执行的,若主线程要获取异步委托线程的结果,则主线程需要等待异步委托的执行结果. BeginInvoke是Delegate类型的一个方法,它的返回类型为IAs ...

  7. Redis集群方案之主从复制(待实践)

    Redis有主从复制的功能,一台主可以有多台从,从还可以有多台从,但是从只能有一个主.并且在从写入的数据不会复制到主. 配置 在Redis中,要实现主从复制架构非常简单,只需要在从数据库的配置文件中加 ...

  8. Servlet的服务端响应

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/server-response.html: 当一个Web服务器对浏览器响应一个HTTP请求时,响应 ...

  9. AIM Tech R3 div2 E Centroid

    思路很明显了,假设是点x,则看它的子树中是否有大于n/2的,如果有,则在该子树中剪去它可以剪的且小于n/2的,接到点x上. 则统计出在以x点为根的子树中,它的各子树可以剪去的且小于n/2的最大子子树. ...

  10. 网易互娱2017实习生招聘游戏研发工程师在线笔试第二场 C

    偶尔碰到这题,简单数位DP题,然而我已生疏了…… 这次算是重新想到的,看来对DP的理解有增进了…… dp[i][j][k],表示前i为,mod为j,是否出现2.3.5的剩下的数位可组成的数字.答案就是 ...