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的定義,方法可以任意組合。
實際項目中,一般是兩種混用。