文章出處

springBeanFactoryAware 

(轉)要直接在自己的代碼中讀取spring的bean,我們除了根據常用的set外,也可以通過spring的BeanFactoryAware接口實現,只要實現setBeanFactory方法就可以,

Java代碼  收藏代碼
  1. private BeanFactory               beanFactory;  
  2.   
  3. public void setBeanFactory(BeanFactory beanFactory) throws BeansException {  
  4. this.beanFactory = beanFactory;  
  5. }  

 

這樣我們就可以直接拿東西用了,如

Java代碼  收藏代碼
  1. Object  object = beanFactory.getBean(beanName);  

 

我們既然可以通過set來拿到我們要的對象,為什么還要用這個beanFactory呢,道理很簡單,因為有些情況是需要動態的去獲取 對象的,比如說我有10個銀行的處理對象,他們都繼承了我的BankService對象,但是具體處理的時候要哪家銀行的對象呢?這個依賴于用戶的選擇。 你可以注入10個BankService實例,然后用if --else來搞,不過那樣太坨了。每增加一家銀行你都需要改代碼。

通過beanFactory的話,那就一行代碼搞定,只要給beanName就OK了,動點腦筋吧beanName配置的有規律點,然后根據用戶的銀行選擇,湊出個beanName,大功告成了!

另外注意:

使用ClassPathXmlApplicationContext 加載bean.xml文件才能將實現BeanFactoryAware接口的bean的BeanFactory注入進去。

 

spring的IoC容器核心為BeanFactory接口,該接口的最常用實現是XmlBeanFactory類,該類使用xml配置文件來初始化一個BeanFactory實例。

ApplicationContext是對BeanFactory接口的擴展,在大多數的應用中,使用ApplicationContext的優先級要高于BeanFactory,兩者對比如下:

 

 

 

特性

BeanFactory

ApplicationContext

Bean 實例化/裝配

Yes

Yes

自動 BeanPostProcessor 注冊

No

Yes

自動 BeanFactoryPostProcessor 注冊

No

Yes

便捷的 MessageSource 訪問( i18n)

No

Yes

ApplicationEvent 發送

No

Yes

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()