Spring原始碼之BeanFactoryAware介面
1、用處
獲取bean
2、使用方法
實現BeanFactoryAware介面的setBeanFactory方法。BeanFactoryAware也只有這個方法。
private BeanFactory beanFactory; public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } Object object = beanFactory.getBean(beanName); //或者 this.getBean(beanName);
3、好處
我們既然可以通過set來拿到我們要的物件,為什麼還要用這個beanFactory呢,道理很簡單,因為有些情況是需要動態的去獲取 物件的,比如說我有10個銀行的處理物件,他們都繼承了我的BankService物件,但是具體處理的時候要哪家銀行的物件呢?這個依賴於使用者的選擇。 你可以注入10個BankService例項,然後用if --else來搞,不過那樣太坨了。每增加一家銀行你都需要改程式碼。
通過beanFactory的話,那就一行程式碼搞定,只要給beanName就OK了,動點腦筋吧beanName配置的有規律點,然後根據使用者的銀行選擇,湊出個beanName,大功告成了!
4、注意
使用ClassPathXmlApplicationContext 載入bean.xml檔案才能將實現BeanFactoryAware介面的bean的BeanFactory注入進去。
5、擴充套件
spring的IoC容器核心為BeanFactory介面,該介面的最常用實現是XmlBeanFactory類,該類使用xml配置檔案來初始化一個BeanFactory例項。
ApplicationContext是對BeanFactory介面的擴充套件,在大多數的應用中,使用ApplicationContext的優先順序要高於BeanFactory,兩者對比如下:
參考來源:https://www.cnblogs.com/pc-boke/articles/9156978.html
更多:https://blog.csdn.net/jianjun200607/article/details/94986347