Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2501303
  • 博文数量: 319
  • 博客积分: 9650
  • 博客等级: 中将
  • 技术积分: 3881
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-27 21:05
文章分类

全部博文(319)

文章存档

2017年(5)

2016年(10)

2015年(3)

2014年(3)

2013年(10)

2012年(26)

2011年(67)

2010年(186)

2009年(9)

分类: Java

2010-06-02 20:00:58

默认情况下,Spring的Ioc容器启动时会初始化bean,但是我们可以指定Bean节点的lazy-init="true",来延迟初始化bean。这时候,只有第一次获取bean才会初始化bean。如

Xml代码
  1. <bean id="userBean" class="com.szy.spring.implbean.UserBean" lazy-init="true" />  

 如果想对所有的bean有应用延迟初始化,可以在跟节点beans设置default-lazy-init="true",如下:

Xml代码
  1. <beans default-lazy-init="true"....>  

 此外,如果我们还想UserBean在实例化是调用初始化方法时,我们可以加入“init-method="init"”属性,其中init为Userbean中的init()方法,与之对应,“destroy-method="destroy"”为销毁属性。

在Spring中我们通过getBean(name)方法获得实例,那么我们每次获取的实例化对象是一个还是多个呢?

我们可以通过“==”进行测试

Java代码
  1. ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");      
  2. PersonBean bean1=(PersonBean)ctx.getBean("userBean");   
  3. PersonBean bean2=(PersonBean)ctx.getBean("userBean");   
  4. System.out.println(bean1==bean2);  

 运行输出结果为:true

这说明了Bean交给sping容器管理之后,Bean默认情况下是单实例的。

如果我们想每次通过getBean(name)方法获得实例是一个新的实例化对象该怎么办呢?

在配置文件中节点bean有一个属性scope,只要我们配置如下即可:

Xml代码
  1. <bean id="userBean" class="com.szy.spring.implbean.UserBean" scope="prototype" />  

 在运行测试代码,输出结果为:false

阅读(2299) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~