赞
踩
Scope属性主要由applicationcontext.xml中的属性进行配置
Bean的基本属性:
Id:Bean实例在容器中唯一的标识
Class:Bean的全限定名称
Bean标签的范围:
scope指对象的作用范围
取值范围:
1.singleton:默认的,单例范围
2.prototype:多例的
3.request:Web项目中,Spring创建一个Bean对象,将对象存到request域中
4.session:Web项目中,Spring创建一个Bean对象,将对象存到session域中
5.global session:Web项目中,应用在portlet环境,如果没有portlet环境,则global Session 相当于Session。
实例代码:
在applicationcontext.xml中
<bean id="userDao" class="com.learning.impl.UserDaoimpl" scope="prototype"></bean>
然后用junit创建一个Test测试
//测试Scope属性:prototype时
@Test
public void test1(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) app.getBean("userDao");
UserDao userDao2 = (UserDao) app.getBean("userDao");
System.out.println(userDao1.hashCode());
System.out.println(userDao2.hashCode());
}
同理把applicationcontext.xml中的属性值设置为:singleton时,其这两个对象的hashcode值相同。
userDao1和userDao2的hashcode值相同,他们的地址值也是相同的。
当一个Bean对象的scope为single时,SpringIOC容器中只会存在一个共享的bean实例,并对所有的对bean的请求,只要有id与我们的实例相匹配,都会返回该bean的一个对象实例。
当applicationcontext中scope值为prototype时
userDao1和userDao2的hashcode值不同:
userDao1产生的hashcode值:1316864772
userDao2产生的hashcode值:1685232414
而在scope域为prototype时,每一次请求都会产生一个新的Bean实例,相当于new了一个对象,而且prototype并不安全,因为他在new了一个对象交给容器后,容器在初始化、配置或装配完一个prototype实例后,把他交给客户端,随后就对prototype不闻不问了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。