Spring、Bean 的作用域

Singleton作用域(默认)

        当一个bean的作用域为singleton,那么Spring Ioc容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。也就是说,当把一个bean定义设置为singleton作用域时,Spring IoC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例。假如在单个Spring容器内定义了某个指定class的bean,那么Spring容器将会创建一个且仅有一个由该bean定义知道的类实例。Singleton作用域是Spring中的缺省作用域。要在XML中将bean定义成singleton。其配置:

< bean  id ="userDaoImpl"  class ="com.hujuan.dao.impl.UserDaoImpl"  scope ="singleton" ></ bean >

	@Test
	public void test() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		PersonIService personIService=(PersonIService)ac.getBean("personIService");
		PersonIService personIService1=(PersonIService)ac.getBean("personIService");
		System.out.println(personIService==personIService1);
	}

结果:



Prototype作用域

        Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例,根据经验,对有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域,要在XML中将bean定义成prototype,其配置:

< bean  id ="userDaoImpl"  class ="com.hujuan.dao.impl.UserDaoImpl"  scope ="prototype" ></ bean >

	@Test
	public void test() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		PersonIService personIService=(PersonIService)ac.getBean("personIService");
		PersonIService personIService1=(PersonIService)ac.getBean("personIService");
		System.out.println(personIService==personIService1);
	}




Request 作用域

< bean  id ="userDaoImpl"  class ="com.hujuan.dao.impl.UserDaoImpl"  scope ="request" ></ bean >

        针对每次Http请求,Spring容器会根据userDaoImpl bean定义创建一个全新的UserDaoImpl bean实例,且该userDaoImpl bean实例仅在当前HTTP request内有效,因此可以根据需要放心的更改所建实例的内部状态,而其他请求中根据userDaoImpl bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。当处理结束,request作用域的bean实例将销毁。


Session作用域

< bean  id ="userDaoImpl"  class ="com.hujuan.dao.impl.UserDaoImpl"  scope ="session" ></ bean >

         针对某个HTTP session,Spring容器会根据userDaoImpl bean定义创建一个全新的userDaoImpl bean实例,且该userDaoImpl bean仅在当前HTTP Session内有效。与request作用域一样,你可以根据需要放心的更改所创建实例的内部状态,而别的HTTP Session中根据userDaoImpl创建的实例,将不会看到这些特定于某个HTTP Session的状态变化。当HTTP Sessison最终被废弃的时候,在该HTTP Session作用域内的bean也会被废弃掉。


转载于:https://www.cnblogs.com/raphael5200/p/5114743.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值