在上一篇博文裡我已經簡單介紹了一些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,如需轉載請自行聯系原作者