本文研究的主要是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來達到目的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
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了:
1
2
3
4
5
|
< 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()方法實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://blog.csdn.net/liuxiao723846/article/details/73794128