新聞中心
Spring的依賴注入容器的核心是Bean工廠。Bean工廠負責管理組件和它們之間的依賴關(guān)系。一般說來,你的Beans應(yīng)該遵守JavaBeans 規(guī)范,但是這不是必須的,如果使用構(gòu)造器依賴注入來連接的Beans的時候,就沒有遵守Beans規(guī)范(Beans規(guī)范中的javabean構(gòu)造函數(shù)沒有參數(shù))。

臨滄網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),臨滄網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為臨滄上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的臨滄做網(wǎng)站的公司定做!
一個BeanFactory可以用接口org.springframework.beans.factory.BeanFactory表示, 這個接口有多個實現(xiàn)。最常使用的的簡單的beanFactory實現(xiàn)是 org.springframework.beans.factory.xml.XmlBeanFactory。
如果通過配置文件來完成配置,在內(nèi)部是通過實現(xiàn)了BeanDefinition接口的類的實例來表現(xiàn)的。Bean的配置不僅存儲著關(guān)于ean自己的信息,同時還有其依賴的beans的信息。對于任何實現(xiàn)了beanDefinitionRegistry接口的BeanFactory類,從配置文件中讀取BeanFactory定義Bean(BeanDefinition)數(shù)據(jù),既可以通過PropertiesBeanDefinitionReader(基于.properties文件)也可以通過XMLBeanDefinitionReader(基于XML文件)。
XmlBeanFactory派生于DefaultListableBanFactory并且簡單的擴展了它,使它能夠通過XmlBeanDefinitionReader自動獲取配置信息。用戶不需要實例化BeanFactory,因為Spring框架代碼會做這件事。
一個XmlBeanFactory定義Bean的內(nèi)容有:
classname:這通常是bean的真正的實現(xiàn)類。但是如果一個bean使用一個靜態(tài)工廠方法所創(chuàng)建而不是被普通的構(gòu)造函數(shù)創(chuàng)建,那么這實際上就是工廠類的classname bean行為配置元素:它聲明這個bean在容器的行為方式(比如prototype或singleton,自動裝配模式,依賴檢查模式,初始化和析構(gòu)方法)。
BeanFactory調(diào)用某個類的靜態(tài)的工廠方法來創(chuàng)建bean,class屬性指定了實際包含靜態(tài)工廠方法的那個類。有以下3個途徑創(chuàng)建bean:
1.通過構(gòu)造函數(shù)創(chuàng)建bean
2.通過靜態(tài)工廠方法創(chuàng)建Bean
3.通過實例工廠方法創(chuàng)建bean
每一個bean都有一個或多個id(也叫作標志符,或名字;這些名詞說的是一回事)。這些id在管理bean的BeanFactory或 ApplicationContext中必須是唯一的。一個bean一般只有一個id,但是如果一個bean有超過一個的id,那么另外的可以認為是別名。
BeanFactory定義Beans為兩種部署模式中的一種:singleton或prototype。如果一個bean是singleton形態(tài)的,那么就只有一個共享的實例存在, 所有和這個bean定義的id符合的bean請求都會返回這個唯一的、特定的實例。如果bean以non-singleton,prototype模式部署的話,對這個bean的每次請求都會創(chuàng)建一個新的bean實例。這對于例如每個user需要一個獨立的user對象這樣的情況是非常理想的。
Beans 默認被部署為singleton模式,除非你指定。要記住把部署模式變?yōu)閚on-singletion(prototype)后,每一次對這個bean的請求都會導致一個新創(chuàng)建的bean,而這可能并不是你真正想要的。所以僅僅在絕對需要的時候才把模式改成prototype。(我僅在 ThrowawayController時使用過singleton="false)
反向控制/依賴注射存在兩種主要的形式:
1.基于setter的依賴注射,是在調(diào)用無參的構(gòu)造函數(shù)或無參的靜態(tài)工廠方法實例化你的bean之后, 通過調(diào)用你的bean上的setter方法實現(xiàn)的。在BeanFactory定義Bean的使用基于setter方法的注射依賴的bean是真正的JavaBean。 Spring一般提倡使用基于setter方法的依賴注射,因為很多的構(gòu)造函數(shù)參數(shù)將會是笨重的, 尤其在有些屬性是可選的情況下。
2.基于構(gòu)造函數(shù)的依賴注射,它是通過調(diào)用帶有許多參數(shù)的構(gòu)造方法實現(xiàn)的, 每個參數(shù)表示一個合作者或者屬性。 雖然Spring一般提倡在大多數(shù)情況下使用基于setter的依賴注射, 但是Spring還是完全支持基于構(gòu)造函數(shù)的依賴注射,因為你可能想要在那些只提供多參數(shù)構(gòu)造函數(shù)并且沒有setter方法的遺留的bean上使用Spring。另外對于比較簡單的bean,使用構(gòu)造函數(shù)方法以確保bean不會處于錯誤的狀態(tài)。
【編輯推薦】
- Spring3.0將全面支持REST
- 專家Isvy談Spring 3.0
- JSF與Spring的集成
- 詳細介紹Spring事務(wù)管理
- Spring框架的事務(wù)管理應(yīng)用分析
本文題目:Spring中的BeanFactory定義Bean
文章URL:http://fisionsoft.com.cn/article/dhgdopp.html


咨詢
建站咨詢
