???Spring中BeanFactory支持兩個對象模型
<!--[if !supportLists]--> <!--[endif]--> 單態:模型提供了具有特定名稱的對象的共享實例,可以在查詢時對其進行檢索。Singleton 是默認的也是最常用的對象模型。對于無狀態?? 服務對象很理想。
<!--[if !supportLists]--> 原型:模型確保每次檢索都會創建單獨的對象。在每個用戶都需要自己的對象時,原型模型最適合。
實例:
?1??<??beans??>
?2?
??????
?3???????<!--?non-singleton?examples?-->
?4??????<bean?id="nonSingleton"?class="java.lang.String"?singleton="true">
?5??????????<constructor-arg>
?6???????????????<value>Value</value>
?7??????????</constructor-arg>
?8???????</bean>
?9?
??
10??</beans>
11?
12?singleton:指定此JavaBean是否采用單例(Singleton)模式,如果設為"true",則在BeanFactory作用范圍內,只維護此JavaBean??的一個實例,代碼通過BeanFactory???獲得此JavaBean??實例的引用。反之,如果設為"false",則通過BeanFactory獲取此Java?Bean??實例時,BeanFactory每次都將創建一個新的實例返回。
???
???? 1?public?class
?NonSingleton?{
?2?
?3?public?static?void
?main(String[]?args)?{
?4?
?
?5?BeanFactory?factory?=?new?XmlBeanFactory(new
?FileSystemResource(
?6?????????????????????"build/beans.xml"
));
?7?
???????
?8????String?s1?=?(String)factory.getBean("nonSingleton"
);
?9????String?s2?=?(String)factory.getBean("nonSingleton"
);
10????System.out.println("Identity?Equal?:?"?+?(s1?==
s2));
11????System.out.println("Value?Equal:??"?+
?s1.equals(s2));
12?
???System.out.println(s1);
13?
???System.out.println(s2);
14?
?}
15?}
?? 分析結果:
?? Identity Equal?: true
Value Equal:? true
Value
Value
?? 由結果可以看出由fantory產生的bean對象只有一個。
? 注意:
在Spring中消除了由用戶自己來實現Singleton模式的應用,Spring Bean的缺省行為就是Singleton,不必再為了Singleton編碼。
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調華麗/簡單生活/完美人生