Spring中bean的基本xml配置

          有狀態的bean ,需設置 <bean .......singleton="false"></bean>
          **********

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

          ClassPathXmlApplicationContext

          FileSystemXmlApplicationContext

          XmlWebApplicationContext

          基本的 xml 配置包括如下幾個方面:

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

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

          2 .通過 Setter 方法手動設置 bean 里的屬性
          Bean
          里的屬性通過 <property> 標簽來標識。有以下幾種情況:
          簡單類型屬性
          <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 = “..”>
          這樣叫做內部 bean ,缺點是無法在其他地方重用這個 bean 的實例。
          裝配集合
          共有以下幾種集合的裝配:
          ****
          裝配 List 和數組 ****
          <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>
          設置 null
          要將一個屬性 null ,需要通過 <null /> 標簽,如果不設置,則屬性為默認值 ( 在實例化時 ) 而不是 null
          <property name=”name”> <null /> </property>

          3 .通過構造器手動設置 bean 里的屬性
          假設有如下一個 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 是用來標識該參數在構造函數里的位置的,并從 0 開始。

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

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

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

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

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          公告

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

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          收藏夾

          Java Website

          java技術博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黑龙江省| 古丈县| 东丰县| 沁源县| 得荣县| 左权县| 汤阴县| 瑞安市| 开江县| 资兴市| 会宁县| 清涧县| 余江县| 曲阳县| 沙湾县| 甘肃省| 修水县| 正镶白旗| 隆子县| 巫溪县| 东乌珠穆沁旗| 府谷县| 磴口县| 永兴县| 定边县| 乌兰察布市| 贵德县| 常熟市| 饶平县| 炉霍县| 芦山县| 凤冈县| 永德县| 曲周县| 彰化市| 墨竹工卡县| 合阳县| 章丘市| 偃师市| 汽车| 渭南市|