天天看点

Spring 核心框架之Bean配置

在上一篇博文里我已经简单介绍了一些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,如需转载请自行联系原作者