Spring 发展到现在,已经不是最开始简单的IOC或者 AOP容器了,而如何进行一个自定义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
BeanAgetBeanA
()
{return
beanA; }public
BeanBgetBeanB
()
{return
beanB; }public
CbeanC
()
{return
new
C(); } }/<code>
l 几乎没过多久,Spring支持了 @Configuration 和 @Bean注解,为声明Bean提供了更大的便利
举例:
<code>public
class
AppConfig
{public
MessageBuildermessageBuilder
()
{return
new
MessageBuilder(); } }/<code>
@Component 和 @Bean的比较
两者各有优劣,@Bean 配合 @Configuration ,可以让一些第三方的类也同spring 的生命周期绑定起来。一些复杂的情况,也只能使用@Bean;
@Component,是将整个类作为一个bean的定义,由spring 扫包并管理
@Bean ,是方法级别,一个方法的返回即为一个Bean的定义,方法可以任意组合。
实际项目中,一般是两种混用。