天天看點

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,如需轉載請自行聯系原作者