Spring 管理Bean的生命週期的幾種方式

Spring 發展到現在,已經不是最開始簡單的IOC或者 AOP容器了,而如何進行一個自定義Bean的聲明和裝配,也有了多種方式。簡單整理如下:

Spring 管理Bean的生命週期的幾種方式


l Spring Framework 2.5 之前,大部分項目還是SSH組合

一般使用 XML 配置,無論是 Bean的聲明(註冊 | new)還是 Bean的裝配一般都要進行對應的XML配置;對大項目來說冗長的XML實在難用。一個典型的例子如下:

<code>"exampleInitBean" 

class

=

"examples.ExampleBean"

init-method=

"init"

/>

public

class

ExampleBean

{

public

void

init

(

)

{ } }/<code>

l Spring Framework 發展到 3之後,SpringMVC代替了Struts作為主角,這時引入了註解

@Component (@Controller 、@Repository 、@Service)

等註解幫助我們聲明一個類, 並使用 @Autowired 進行自動裝配。極大的解放了開發者。

同時,推薦基於 JSR-250的註解(@PostConstruct 、 @PreDestroy)進行生命週期管理

聲明的例子:

<code> (

"testBean"

)

public

class

TestBeanAsComponent

{          

private

BeanA beanA;                

private

BeanB beanB;           

public

BeanA

getBeanA

()

{         

return

beanA;     }           

public

BeanB

getBeanB

()

{         

return

beanB;     }                

public

C

beanC

()

{         

return

new

C();     } }/<code>


l 幾乎沒過多久,Spring支持了 @Configuration 和 @Bean註解,為聲明Bean提供了更大的便利

舉例:

<code> 

public

class

AppConfig

{  

public

MessageBuilder

messageBuilder

()

{

return

new

MessageBuilder(); } }/<code>

@Component 和 @Bean的比較

兩者各有優劣,@Bean 配合 @Configuration ,可以讓一些第三方的類也同spring 的生命週期綁定起來。一些複雜的情況,也只能使用@Bean;

@Component,是將整個類作為一個bean的定義,由spring 掃包並管理

@Bean ,是方法級別,一個方法的返回即為一個Bean的定義,方法可以任意組合。

實際項目中,一般是兩種混用。


分享到:


相關文章: