1. 程式人生 > >Spring中的BeanFactory與FactoryBean看這一篇就夠了

Spring中的BeanFactory與FactoryBean看這一篇就夠了

前言 理解FactoryBean是非常非常有必要的,因為在Spring中FactoryBean最為典型的一個應用就是用來建立AOP的代理物件,不僅如此,而且對理解Mybatis核心原始碼也非常有幫助!如果甘願crud,做個快樂的碼農,那我就哦豁豁豁豁豁豁豁豁豁豁豁豁豁豁...... @[toc] BeanFactory和FactoryBean同樣都是spring的介面,名字看起來很相似,但是我覺得要混淆還是很困難的!儘管Spring揭祕一書的作者都喜歡寫上這一句。 > 請不要混淆BeanFactory 和 FactoryBean。 ## 1、BeanFactory BeanFactory,以Factory結尾,表示它是一個工廠(介面), 它負責生產和管理bean的一個工廠。在Spring中,BeanFactory是工廠的頂層介面,也是IOC容器的核心介面,因此BeanFactory中定義了**管理Bean的通用方法**,如 **getBean** 和 **containsBean** 等,它的職責包括:例項化、定位、配置應用程式中的物件及建立這些物件間的依賴。BeanFactory只是個介面,並不是IOC容器的具體實現,所以Spring容器給出了很多種實現,如 **DefaultListableBeanFactory**、**XmlBeanFactory**、**ApplicationContext**等,其中XmlBeanFactory就是常用的一個,該實現將以XML方式描述組成應用的物件及物件間的依賴關係。 #### 1.1 BeanFactory 原始碼 ```javascript public interface BeanFactory { //對FactoryBean的轉義定義,因為如果使用bean的名字檢索FactoryBean得到的物件是工廠生成的物件, //如果需要得到工廠本身,需要轉義 String FACTORY_BEAN_PREFIX = "&"; //根據bean的名字,獲取在IOC容器中得到bean例項 Object getBean(String name) throws BeansException; //根據bean的名字和Class型別來得到bean例項,增加了型別安全驗證機