Spring中bean的基本xml配置

          有狀態(tài)的bean ,需設(shè)置 <bean .......singleton="false"></bean>
          **********

          spring 容器內(nèi)拼湊 bean 叫作裝配。裝配 bean 的時(shí)候,你是在告訴容器,需要哪些 bean ,以及容器如何使用依賴注入將它們配合在一起。
          理論上, bean 裝配可以從任何資源獲得,包括屬性文件,關(guān)系數(shù)據(jù)庫(kù)等,但 xml 是最常見的 spring 應(yīng)用系統(tǒng)配置源。 Spring 中的幾種容器都支持使用 xml 裝配 bean ,包括:
          XmlBeanFactory

          ClassPathXmlApplicationContext

          FileSystemXmlApplicationContext

          XmlWebApplicationContext

          基本的 xml 配置包括如下幾個(gè)方面:

          1
          .添加一個(gè) bean
          2
          .設(shè)置 bean 的屬性
          2.1
          手動(dòng)設(shè)置
          2.1.1
          通過 Setter 方法
          2.1.2
          通過構(gòu)造器
          2.2
          自動(dòng)設(shè)置
          其中 bean 的屬性即為 bean 里的成員變量,這些成員變量值的獲得可以通過 setter 方法,例如某個(gè)屬性為 name, setter 方法為 setName(String name) ;或者通過構(gòu)造器在類被實(shí)例化時(shí)初始化。 Setter 方法 ( 例如 setName 方法 ) 或者構(gòu)造器的調(diào)用都可以通過在 xml 文件里進(jìn)行配置,從而實(shí)現(xiàn)讓 spring 容器來(lái)自動(dòng)進(jìn)行。

          1 .添加一個(gè) bean
          以下是一個(gè)例子:
          <bean
          id = “mybean”
          Class = “blog.spring.MyBean”
          Singleton = “false”
          init-method = “initMethod”
          destroy-method = “destroyMethod”
          autowire = “autowire type”
          />
          下面是對(duì)該標(biāo)簽里各個(gè)屬性的解釋:
          Id :
          標(biāo)識(shí)該 bean 的名稱,通過 factory.getBean(“id”) 來(lái)獲得實(shí)例。
          Class :
          bean 的類路徑。
          Singleton :
          默認(rèn)為 true ,即單實(shí)例模式,每次 getBean(“id”) 時(shí)獲取的都是同
          一個(gè)實(shí)例,如果設(shè)置為 false ,即原型模式,則每次獲取的是新創(chuàng)建
          的實(shí)例。
          Init-method :
          bean 實(shí)例化后要調(diào)用的方法 (bean 里定義好的方法 )
          Destroy-method : bean
          從容器里刪除之前要調(diào)用的方法。
          Autowire :
          其屬性要通過何種方法進(jìn)行屬性的自動(dòng)裝配。
          對(duì)于上述的各個(gè)屬性, id class 是必要的,其他的則可以省略。例如如果設(shè)置了 autowire 的值,則表明需要自動(dòng)裝配,否則是手動(dòng)裝配。

          2 .通過 Setter 方法手動(dòng)設(shè)置 bean 里的屬性
          Bean
          里的屬性通過 <property> 標(biāo)簽來(lái)標(biāo)識(shí)。有以下幾種情況:
          簡(jiǎn)單類型屬性
          <bean id = “mybean” class = “blog.spring.MyBean”>
          <property name = “name”>
          <value>springTest</value>
          </property>
          </bean>
          引用其他 bean
          <bean id = “mybean” class = “blog.spring.MyBean” />
          <bean id = “mybean1” class = “blog.spring.MyBean1”>
          <property name = “name”>
          <ref bean = “mybean” />
          </property>
          </bean>
          也可以將 <ref> 改為
          <bean class = “..”>
          這樣叫做內(nèi)部 bean ,缺點(diǎn)是無(wú)法在其他地方重用這個(gè) bean 的實(shí)例。
          裝配集合
          共有以下幾種集合的裝配:
          ****
          裝配 List 和數(shù)組 ****
          <property name = ”nameList”>
          <list>
          <value>something</value>
          <ref bean = “blog.spring.MyBean” />
          <value>otherThing</value>
          </list>
          </property>
          ****
          裝配 Set****
          <property name = ”nameList”>
          <set>
          <value>something</value>
          <ref bean = “blog.spring.MyBean” />
          <value>otherThing</value>
          </set>
          </property>
          ****
          裝配 Map****
          <property name = ”nameList”>
          <map>
          <entry key = “key1”>
          <value>value1</value>
          </entry>
          <entry key = “key2”>
          <ref bean = “mybean” />
          </entry>
          </map>
          </property>
          ****
          裝配 Properties****
          <property name = ”nameList”>
          <props>
          <prop key = “prop1”>value1</prop>
          <prop key = “prop2”>value2</prop>
          </props>
          </property>
          設(shè)置 null
          要將一個(gè)屬性 null ,需要通過 <null /> 標(biāo)簽,如果不設(shè)置,則屬性為默認(rèn)值 ( 在實(shí)例化時(shí) ) 而不是 null
          <property name=”name”> <null /> </property>

          3 .通過構(gòu)造器手動(dòng)設(shè)置 bean 里的屬性
          假設(shè)有如下一個(gè) bean
          Public class MyBean {
          Public MyBean( String arg1, MyBean1 arg2, String arg3 )
          }
          則可以在 xml 里這樣配置該 bean
          <bean id = “mybean” class = “blog.spring.MyBean”>
          <constructor-arg index = “1”>
          <value>springTest</value>
          <constructor-arg>
          <constructor-arg index = “0”>
          <ref bean = “mybean1” />
          <constructor-arg>
          </bean>
          其中的 index 是用來(lái)標(biāo)識(shí)該參數(shù)在構(gòu)造函數(shù)里的位置的,并從 0 開始。

          4 .讓 spring 完成自動(dòng)裝配
          例如:
          <bean
          id = “mybean”
          class = “blog.spring.MyBean”
          autowire = “autowire type”
          />
          下面是幾種 autowire type 的說(shuō)明:
          ● byname :
          試圖在容器中尋找和需要自動(dòng)裝配的屬性名相同的 bean id ,如果沒有找到相應(yīng)的 bean ,則這個(gè)屬性未被裝配上。
          ● byType :
          試圖在容器中尋找一個(gè)與需要自動(dòng)裝配的屬性類型相同的 bean id ,如果沒有找到,則該屬性未被裝配上。
          ● constructor :
          試圖在容器中尋找與需要自動(dòng)裝配的 bean 的構(gòu)造函數(shù)參數(shù)一致的一個(gè)或多個(gè) bean ,如果沒找到則拋出異常。
          ● autodetect :
          首先嘗試使用 constructor 來(lái)自動(dòng)裝配,然后再使用 byType 方式。
          從上面可以看出,如果某個(gè) bean 不手動(dòng)設(shè)置 autowire 屬性,則默認(rèn)為手動(dòng)裝配。如果需要將所有 bean 都設(shè)置為自動(dòng)裝配時(shí),可以通過在 <beans> 標(biāo)簽中設(shè)置 default-autowire 屬性。 <beans> 標(biāo)簽是整個(gè) xml 文檔的根,在它下面就是一個(gè)個(gè)的 <bean>
          其中 default-autowire 的值也有 byName byType constructor autodetect 四種。
          例如配置如下:
          <beans default-autowire = “byName”>
          ...
          </beans>

          自動(dòng)裝配可能帶來(lái)不確定性問題。例如使用 byType 時(shí)可能同時(shí)發(fā)現(xiàn)兩個(gè)相同的類型,則不知道該采用哪一個(gè)。所以可能混合采用自動(dòng)和手動(dòng)裝配。例如,對(duì)某個(gè) bean 設(shè)置為自動(dòng)裝配,而對(duì)其某個(gè)屬性則手動(dòng)明確的設(shè)置其值,例如:
          <bean id = “mybean” class = “blog.spring.MyBean”
          Autowire = “byType”
          >
          <property name = “name”>
          <ref bean = “myBean1”>
          </property>
          </bean>
          通過這樣的配置,對(duì) mybean 里的 name 屬性進(jìn)行手動(dòng)裝配,而對(duì)除 name 外的其他屬性就進(jìn)行自動(dòng)裝配。

          好貼:http://bbs.bccn.net/thread-83040-1-1.html

          posted on 2009-04-12 23:05 luofeng225 閱讀(933) 評(píng)論(0)  編輯  收藏 所屬分類: Spring


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          我曾經(jīng)聽到這么一個(gè)故事: 一個(gè)年輕的程序員問一個(gè)老程序員(一個(gè)比較牛逼的公司的CTO) 年輕程序員: 你為什么這么牛X., 就好像沒有你不會(huì)的。老程序員: 積累的。年輕程序員: 怎么才能積累到您的程度呢。我每天都在積累。但是似乎都沒有感覺到進(jìn)步。老程序員: 我從20歲開始做到了一件事情,直到今天,而且盡可能地保證不間斷。年輕程序員: 到底是什么? 老程序員: 我每天保證自己有2個(gè)小時(shí)在學(xué)習(xí)新的東西。

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          相冊(cè)

          收藏夾

          Java Website

          java技術(shù)博客

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 清涧县| 泗水县| 延吉市| 栾城县| 北碚区| 海门市| 轮台县| 翁牛特旗| 嘉祥县| 崇州市| 宁城县| 克东县| 福清市| 东辽县| 漳州市| 连云港市| 平阳县| 江都市| 台南市| 札达县| 隆回县| 常熟市| 张北县| 苍梧县| 临安市| 贵南县| 恩平市| 资兴市| 梅河口市| 龙江县| 长沙市| 延庆县| 江陵县| 康马县| 长白| 东台市| 逊克县| 乐清市| 昌邑市| 荔浦县| 新宁县|