Spring入门---Spring Bean的作用域【第一天】
一、Spring Bean的作用域:
在Spring2.0之前Bean只有两种作用域,即单例【singleton】和non-singleton(也成prototype)。Spring2.0之后,增加了session、request、global session这三种专用于Web运用程序上下文的Bean。Spring2.0之后对Bean的类型进行了重构,并设计出灵活的Bean支持,理论上可以有无数多种类型的Bean。可根据需要增加新的Bean类型,以满足实际运用的需求。
(后续可学习如何重构新的Bean类型)。
1、singleton单实例:
当一个bean的作用域设置为singleton,那么Spring IOC容器只会存在一个共享的Bean实例,并且所有对Bean的请求只要ID与该Bean定义相匹配,则只会返回Bean的同一实例。即该实例会存储在缓存中。
配置:
<bean id=”userdao” class=”test2.dao.UserDao” scope=”singleton”/>
或者:
<bean id=”userdao” class=”test2.dao.UserDao” scope=”true”>
UserDao bean1 = (UserDao)factory.getBean(“userdao”);
UserDao bean2 = (UserDao)factory.getBean(“userdao”);
bean1与bean2的引用相同,每次使用getBean()不会重新产生一个实例。
2、prototype多实例:
每个容器中,一个Bean对应多个实例。prototype作用域部署的Bean,每一次请求(将其注入到另一个Bean中,或者以程序的方式调用Spring容器的getBean方法)都会产生一个新的Bean实例。
配置:
<bean id=”userdao” class=”test2.dao.UserDao” scope=”prototype”/>
或者:
<bean id=”userdao” class=”test2.dao.UserDao” scope=”false”>
UserDao bean1 = (UserDao)factory.getBean(“userdao”);
UserDao bean2 = (UserDao)factory.getBean(“userdao”);
3、request:
request表示该针对每一次HTTP请求都会产生一个新的Bean,同时该Bean仅在当前HTTP request内有效。
<bean id=”userdao” class=”test2.dao.UserDao” scope=”request”/>
4、session:
session的作用域表示该针对每一次HTTP请求都会产生一个新的Bean,同时该Bean仅在当前HTTP session内有效。
<bean id=”userdao” class=”test2.dao.UserDao” scope=”session”/>