详述Spring中scope的作用

一、介绍scope

在使用IoC容器创建Bean对象时,如果我们创建一个单例的bean,则所有对它的请求都会返回相同的对象。


实例:

Test.java

public class Test {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");//创建IoC容器,并加载配置文件
                Object object = applicationContext.getBean("userInfo");
                System.out.println(object);//输出1
                object = applicationContext.getBean("userInfo");//再次获取UserInfo对象
                System.out.println(object);//输出2
		applicationContext.close();
	}
}

执行结果为:

可见返回了两个相同的对象地址。

此时若添加scope标签并赋"prototype"属性,则会在每次调用Bean对象时每次对它的访问都会返回一个新的对象。


scope配置:

1)xml方式

在xml配置文件中,进行bean配置时,增添scope="prototype"属性

application.xml

<bean id="userInfo" class="com.jd.vo.UserInfo" scope="prototype"/>

2)注解方式

在目标类上添加@Scope注解并配置

@Scope("prototope")
public class Test {

	public static void main(String[] args) {
		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
                Object object = applicationContext.getBean("userInfo");
                System.out.println(object);
		applicationContext.close();
	}
}

使用scope后,Test.java运行结果为:

 两次对象地址不同。

二、scope的不同属性

1、singleton(scope标签默认属性)

仅创建单一实例,此取值时表明容器中创建bean对象时只存在一个实例,因此所有引用此bean都是单一实例。此外,singleton类型的bean定义从容器启动到第一次被请求而实例化开始,只要容器不销毁或退出,该类型的bean的单一实例就会一直存活

2、 prototype

创建多个对象,spring容器在进行输出prototype的bean对象时,会每次都重新生成一个新的对象给请求方。

注意:虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不在拥有当前对象的引用,请求方需要自己负责当前对象后继生命周期的管理工作,包括该对象的销毁。也就是说,容器每次返回请求方该对象的一个新的实例之后,就由这个对象“自生自灭”

3、session

同一个session请求中仅提供一个对象

4、request

同一个request请求中仅提供一个对象

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值