为了账号安全,请及时绑定邮箱和手机立即绑定

spring的ioc容器可以为普通的类创建单例,它是怎么做到的呢?

/ 猿问

spring的ioc容器可以为普通的类创建单例,它是怎么做到的呢?

慕田峪9158850 2018-12-14 15:11:10

spring的ioc容器可以为普通的类创建单例,它是怎么做到的呢


查看完整描述

1 回答

?
萧十郎

1、 当一个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作用域;

3、request指在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。考虑下面bean定义:<bean id="loginAction" class=cn.csdn.LoginAction" scope="request"/>;

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

Bean的作用域不仅可以控制注入到对象中的各种依赖和配置值,还可以控制该对象的作用域。这样可以灵活选择所建对象的作用域,而不必在Java Class级定义作用域。Spring Framework支持五种作用域其中有三种只能用在基于web的Spring ApplicationContext。


查看完整回答
反对 回复 2019-01-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信