或者以程序的方式调用容器的 getBean()方法)都会产生一个新的 bean 实例,相当与一
个 new 的操作,对于 prototype 作用域的 bean,有一点非常重要,那就是 Spring 不能
对一个 prototype bean 的整个生命周期负责,容器在初始化、配置、装饰或者是装配完
一个 prototype 实例后,将它交给客户端,随后就对该 prototype 实例不闻不问了。不管
何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对 prototype 而言,
任何配置好的析构生命周期回调方法都将不会被调用。清除 prototype 作用域的对象并释
放任何 prototype bean 所持有的昂贵资源,都是客户端代码的职责。(让 Spring 容器
释放被 singleton 作用域 bean 占用资源的一种可行方式是,通过使用 bean 的后置处理
器 , 该 处 理 器 持 有 要 被 清 除 的 bean 的 引 用 。 ) 配 置 实 例 : <bean id="role"
class="spring.chapter2.maryGame.Role" scope="prototype"/> 或 者
<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>
3、request request 表示该针对每一次 HTTP 请求都会产生一个新的 bean,同时该
bean 仅在当前 HTTP request 内有效,配置实例:request、session、global session
使用的时候首先要在初始化 web 的 web.xml 中做如下配置:如果你使用的是 Servlet
2.4 及以上的 web 容器,那么你仅需要在 web 应用的 XML 声明文件 web.xml 中增加下
述 ContextListener 即可:
<web-app>
...
<listener>
<listener-
class>org.springframework.web.context.request.RequestContextListener</
listener-class>
</listener>
...
</web-app>
,如果是 Servlet2.4 以前的 web 容器,那么你要使用一个 javax.servlet.Filter 的实现:
<web-app>
..
<9lter>
<9lter-name>requestContextFilter</9lter-name>
<9lter-class>org.springframework.web.9lter.RequestContextFilter</9lter-
class>
</9lter>
<9lter-mapping>
<9lter-name>requestContextFilter</9lter-name>
<url-pattern>/*</url-pattern>
</9lter-mapping>
...
</web-app>
接 着 既 可 以 配 置 bean 的 作 用 域 了 : <bean id="role"
class="spring.chapter2.maryGame.Role" scope="request"/>