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的定义,方法可以任意组合。

实际项目中,一般是两种混用。


分享到:


相關文章: