Spring IoC容器中Bean的作用范围详解

Spring IoC容器中Bean的作用范围详解

作用域将对Bean的生命周期和创建方式产生影响.

singleton  spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在.

<bean id="userDao" class="com.fendou.daoImpl.UserDaoOrcaleImpl" scope="singleton"/>

在默认是singleton,所以可以不显式指定,springApplicationContext容器在启动时,自动实例化所有singletonBean并缓存于容器中.虽然启动时会花费一些时间,但带来两个好处:首先对Bean提前的实例化操作会及早发现一些潜在的配置问题.其次Bean以缓存的方式保存,当运行时使用到该Bean时就无须再实例化了,加快了运行效率.如果用户不希望在容器启动时提前实例化singletonBean,可以通过lazy-init属性进行控制lazy-init="true" lazy-init="true"Bean在某些情况下依旧会提前实例化:如果该Bean被其它需要提前实例化的Bean引用到,spring也将忽略延迟实例化的设置.


prototype  每次从容器中调用Bean,都返回一个新的实例,即每次调用getBean(),相当于执行new XxxBean()的操作.

在默认情况下,spring容器在启动时不实例化prototypeBean.此外,spring容器将prototypeBean交给调用者后,就不再管理它的生命周期. 根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域。


request  每次HTTP请求都会创建一个新的Bean,该作用域仅适用于webApplicationContext环境.
session  同一个HTTP session共享一个Bean,不同HTTP session使用不同的Bean,该作用域仅适用于webApplicationContext环境.
globalSession   同一个全局session共享一个Bean,一般用于portlet应用环境,该作用域仅适用于webApplicationContext环境.

 

在低版本的spring,由于只有两个Bean作用域,所以采用singleton="true|false"的配置方式,spring2.0为了向后兼容,依旧支持这种配置方式.不过,spring2.0推荐采用新的配置方式:scope="<作用域类型>"

你可能感兴趣的:(spring,bean,prototype,配置管理,IOC)