隨筆 - 3  文章 - 1  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          • 1.?re: 不好的項目演示
          • 雖然項目演示失務,但我相信你的項目是最成功的,因為你的態度,你的聰明.

            You are NO.1! my lover
          • --roy117

          閱讀排行榜

          評論排行榜

          在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外的其他屬性就進行自動裝配。
          posted on 2007-03-13 22:14 terryliu 閱讀(6057) 評論(0)  編輯  收藏 所屬分類: spring
          主站蜘蛛池模板: 水城县| 石楼县| 云龙县| 宜兰县| 普定县| 兰溪市| 岗巴县| 沙湾县| 深州市| 西乌| 靖远县| 清苑县| 昌黎县| 永宁县| 花垣县| 石城县| 盐城市| 石景山区| 珲春市| 灵台县| 涡阳县| 吐鲁番市| 永顺县| 富平县| 海林市| 铜川市| 北宁市| 连南| 托克托县| 武穴市| 简阳市| 桃园市| 鞍山市| 阿城市| 咸丰县| 遂川县| 宝山区| 五寨县| 宣武区| 南郑县| 西昌市|