在上一篇博文里我已经简单介绍了一些Beans的基本配置。现在介绍Bean的更为详细的相关内容。
Bean的作用范围(Scope)
在Spring中,Bean有5种作用范围,分别是:
-singleton,即单例模式,在整个环境中仅存在一个Bean的实例对象。
-prototype,可以无限次实例化,从某种程度上说,相当于java的new运算符。
-request,每个Http Request均拥有一个Bean的实例。
-session,每个会话均拥有一个Bean的实例。
-global session,全局session。类似于session,但是仅仅只能在基于Portlet的Web应用程序中使用。
在Spring中,Bean默认Scope是Singleton,若要手动指定Scope,则应在配置文件中插入下面的代码:
<bean id="accountService" class="com.foo.DefaultAccountService" scope="xxx"/>
其中,scope属性取值可为上面的5个值中的任意一个。
需要注意的是,若要使用request,session或者global session,则必须使用可以支持web的ApplicationContext的实现,比如XmlWebApplicationContext,否则会出现IllegalStateException异常。在web程序里面,特别是要与Struts框架相集成的情况下,应在web.xml里面加入下面所示的监听类(要求Servlet版本在2.4以上,其余的版本请查阅相关文档)。
<web-app>
...
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
</web-app>
自定义Bean的特性
对于Bean,可以为其自定义初始化的回调方法和销毁回调方法。
方法很容易,只需在配置文件中加入下面所示的代码:
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
然后在Bean中定义如下的方法:
public class ExampleBean {
public void init() {
// do some initialization work
}
}
对于销毁回调方法,也是一样的,在配置文件中定义 :
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
然后在Bean中定义一个cleanup()方法即可。其实还有一种方法,即Bean实现InitializingBean和DisposableBean接口,也可以达到这种目的。但是如果这么做会与Spring发生耦合,不利于代码的可维护性。
有的时候可能存在许多Bean,这些Bean都需要调用初始化方法,要是在配置文件中逐个修改,是很费时间的事情,我们可以采用默认初始化方法。主要做如下配置:
<beans default-init-method="init">
<bean id="blogService" class="com.foo.DefaultBlogService">
<property name="blogDao" ref="blogDao" />
</bean>
</beans>
这段配置假设初始化方法均命名为init(),一旦创建这个Bean,则会调用所有与之存在依赖关系的Bean的init()。
本文转自 kevx 51CTO博客,原文链接:http://blog.51cto.com/spinlock/327794,如需转载请自行联系原作者