spring中FactoryBean中的getObject()方法執行個體解析,
本文研究的主要是spring中FactoryBean中的getObject()方法的相關內容,具體如下。
FactoryBean介面定義了以下3個介面方法:
- Object getObject():返回有FactoryBean建立的Bean執行個體,如果isSingleton()返回true,則該執行個體會放到Spring容器的單一實例緩衝池中。
- boolean isSingleton():確定由FactoryBean建立Bean的範圍是singleton還是prototype.
- Class getObjectType():返回FactoryBean建立Bean的類型。
當設定檔中 <bean>的class屬性配置的實作類別是FactoryBean時,通過getBean方法返回的不是FactoryBean本身,而是 FactoryBean#getObject()方法所返回的對象,相當於FactoryBean#getObject()代理了getBean()方 法。
我們在配置Car時,Car的每個屬性分別對應一個<property>元素標籤。假設我們嫌這種方式不苟簡潔,而希望通過逗號分隔的方式一次性的為Car的所有屬性制定配置值,那麼我們可以通過編寫一個FactroyBean來達到目的:
import org.springframework.beans.factory.FactoryBean;public class CarFactoryBean implements FactoryBean{private String carInfo;public Stirng getCarInfo(){return carInfo;}public void setCarInfo(String carInfo){this.carInfo=carInfo;}public Object getObject()throws Exception{Car car=new Car();String[]infos = carInfo.split(",");car.setBrand(infos[0]);car.setMaxSpeed(Integer.aarseint(infos[1]));car.setPrice(double.parsedouble(infos[2]));return car;}public Class getObjectType(){return Car.class;}public Boolean isSingleton() {return true;}}
有了這個CarFactoryBean後,我們就可以在設定檔中使用以下的配置方式定義Car Bean了:
<bean id="car" class="com.lxm.fb.carFactoryBean"> <property name="carInfo" value="紅旗CA72,200,20000.00"/> </bean>
當調用getBean("car")時,Spring通過反射機制發現CarFactoryBean實現了FactoryBean的介面,這時 Sping容器就調用介面方法CarFactoryBean#getObject()返回工廠類建立的對象。如果使用者希望擷取 CarFactoryBean的執行個體,則需要在使用getBean(beanName)方法時顯式地在beanName前加上“&”前 綴:getBean("&car").
總結
以上就是本文關於spring中FactoryBean中的getObject()方法執行個體解析的全部內容,希望對大家有所協助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支援!