1. 程式人生 > >Spring:BeanFactory與FactoryBean

Spring:BeanFactory與FactoryBean

FactroyBean :

T getObject() throws Exception;//返回物件

 Class<?> getObjectType();//返回物件型別

boolean isSingleton(); //是否單例

這是一個介面會被一個物件實現,這個物件會被用在一個BeanFactroy當中。 它本身就是一個工廠,如果一個bean實現了這個介面,它就會作為一個工廠用於公開一個物件。而不會直接作為一個被暴露bean的例項。

  1. FactroyBean在Spring框架中得到大量的應用。
  2. FactroyBean本身創建出來的物件並不是FactroyBean這個例項的本身。而是由這個(FactroyBean)工廠所創建出來的物件。他會在AOP中得到大量使用,比如(org.springframework.aop.framework.ProxyFactroyBean)。

BeanFactroy:

String FACTORY_BEAN_PREFIX = "&";//需要返回本身

 Object getBean(String name)throws BeansException;//根據bean的名字,返回bean的物件 

<T> T getBean(String name,Class<T> requiredType) throws BeansException; //傳送bean的名字,class的型別

<T> T getBean(Class<T> requiredType)throws BeansException;//根據型別返回型別的例項,前提這個例項必須在配置中。 

Object getBean(String name,Object ... args) throws BeansException;

boolean containsBean(String name);//是否包含給定名字的bean 

boolean isSingleton(String name)throws NoSuchBeanDefinitionException;//判斷給定名字的bean是不是一個單例物件 

boolean isPrototype(String name)throws NosuchBeanDefinitionException;//是否是一個原型(和isSingleton互斥如果isSingleton是true,那麼這個就是false)

boolean isTypeMatch(String name,Class<?> targetType)throws NosuchBeanDefinitionException;//判斷傳送name的bean物件,是否是targetType這個型別,是為true,不是為false

Class<?> getType(String name)throws NosuchBeanDefinitionException; //根據bean的名字,返回class type

String[] getAliases(String name); //返回給定bean名字的別名,別名可能有多個返回字串陣列

總結:

 BeanFactroy它是整個Spring容器的根容器,它裡面描述了在所有的子介面,或者子類當中對容器的一些處理原則和職責到底是什麼,包括一些生命週期的方法的一些約定。FactroyBean它本身又存活在BeanFactroy當中的,那麼它本身也是一個工廠。這個工廠的作用是用於建立由FactroyBean所能創建出來的物件。那麼在創建出來這個物件時候,這個物件的某一些方法前面或者是後面就可以額外執行一些操作來實現AOP。