3、Spring4之Bean 配置的細節
1). 若字面值中包含特殊字元,則可以使用
value 節點的 <![CDATA[]]> 把字面值包裹起來。
<constructor-arg>
<!-- 若 value 屬性值中包含特殊字串, 則可以使用 value 子節點來注入屬性值. value 子節點中可以使用 CDATA -->
<value><![CDATA[Zheng <><> zhou]]></value>
</constructor-arg>
2). 在 Bean 的配置檔案中, 可以通過 <ref> 元素或 ref 屬性為 Bean 的屬性或構造器引數指定對 Bean 的引用.
<bean id="dao" class="com.atguigu.spring.ioc.ref.Dao">
<property name="database" value="DB2"></property>
</bean>
<bean id="service2" class="com.atguigu.spring.ioc.ref.Service">
<property name="dao" ref="dao"></property>
</bean>
------------------------------------------------------------------------------
解析:<property name="dao" ref="dao"></property> 的作用為:
Dao dao = (Dao)ctx.getBean("dao");
Service service = (Service)ctx.getBean("service2");
service.setDao(dao);
3). 可以在屬性或構造器裡包含 Bean 的宣告, 這樣的 Bean 稱為內部 Bean
<bean class="com.atguigu.spring.ioc.ref.Service" id="service">
<property name="dao">
<bean class="com.atguigu.spring.ioc.ref.Dao">
<property name="database" value="MySQL"></property>
</bean>
</property>
</bean>
解釋:類似於以下程式碼,但 dao 的這個 bean 其實是沒有 id 的,也不能被其他的 bean 來引用,也不能單獨從 IOC 容器中獲取。
<bean class="com.atguigu.spring.ioc.ref.Dao" id="dao">
<property name="database" value="MySQL"></property>
</bean>
<bean class="com.atguigu.spring.ioc.ref.Service" id="service">
<property name="dao" ref="dao"></property>
</bean>
①. 當 Bean 例項僅僅給一個特定的屬性使用時, 可以將其宣告為內部 Bean.
內部 Bean 宣告直接包含在 <property> 或 <constructor-arg> 元素裡, 不需要設定任何 id 或 name 屬性
②. 內部 Bean 不能使用在任何其他地方
4). 可以使用專用的 <null/> 元素標籤為 Bean 的字串或其它物件型別的屬性注入 null 值
<bean id="car6" class="com.atguigu.spring.ioc.Car">
<!-- 為 maxSpeed 賦值為 null, 而 value="null" 是把 null 這個字串賦給了對應的屬性 -->
<property name="corp"><null/></property>
</bean>
5). Spring 支援級聯屬性的配置。
<bean id="action3" class="com.atguigu.spring.ioc.ref.Action">
<property name="service" ref="service2"></property>
<!-- 為 service 的 dao 的 database 賦值為 ORACLE -->
<property name="service.dao.database" value="ORACLE"></property>
</bean>
6). 配置 java.util.List 型別的屬性, 需要指定 <list> 標籤, 在標籤裡包含一些元素.
這些標籤可以通過 <value> 指定簡單的常量值, 通過 <ref> 指定對其他 Bean 的引用.
通過<bean> 指定內建 Bean 定義.
通過 <null/> 指定空元素. 甚至可以內嵌其他集合.
<property name="cars">
<!-- 通過 list 指定集合屬性的值. 但 list 是一個內部 list, 不能被其他的 bean 引用. -->
<list>
<!-- ref 直接指向已有的 bean -->
<ref bean="car"/>
<ref bean="car2"/>
<ref bean="car3"/>
<!-- bean 宣告內部 bean -->
<bean class="com.atguigu.spring.ioc.Car">
<property name="brand" value="BMW"></property>
<property name="corp" value="HuaChen"></property>
<property name="maxSpeed" value="300"></property>
<property name="price" value="800000"></property>
</bean>
</list>
</property>
7). 可以使用 util schema 裡的集合標籤定義獨立的集合 Bean. 需要注意的是, 必須在 <beans> 根元素裡新增 util schema 定義
①. 匯入 util 名稱空間
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
②. 定義集合 Bean
<util:list id="cars">
<!-- ref 直接指向已有的 bean -->
<ref bean="car"/>
<ref bean="car2"/>
<ref bean="car3"/>
<!-- bean 宣告內部 bean -->
<bean class="com.atguigu.spring.ioc.Car">
<property name="brand" value="BMW"></property>
<property name="corp" value="HuaChen"></property>
<property name="maxSpeed" value="300"></property>
<property name="price" value="800000"></property>
</bean>
</util:list>
8). 配置 Map Bean
<util:map id="config">
<entry key="user" value="root"></entry>
<entry key="password" value="1230"></entry>
<entry key="driverClass" value="com.mysql.jdbc.Driver"></entry>
<entry key="jdbcUrl" value="jdbc:mysql:///test"></entry>
</util:map>
9). 配置 Properties 的屬性
<property name="properties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="b">B</prop>
<prop key="c">C</prop>
<prop key="d">D</prop>
</props>
</property>
10). 使用 p 名稱空間簡化 bean 的屬性配置:
①. 匯入 p 的名稱空間
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
②. 使用 p 名稱空間進行配置
<bean id="car7" class="com.atguigu.spring.ioc.Car"
p:brand="Mazda"
p:corp="ChangAn"
p:maxSpeed="220"
p:price="200000"/>
<constructor-arg>
<!-- 若 value 屬性值中包含特殊字串, 則可以使用 value 子節點來注入屬性值. value 子節點中可以使用 CDATA -->
<value><![CDATA[Zheng <><> zhou]]></value>
</constructor-arg>
2). 在 Bean 的配置檔案中, 可以通過 <ref> 元素或 ref 屬性為 Bean 的屬性或構造器引數指定對 Bean 的引用.
<bean id="dao" class="com.atguigu.spring.ioc.ref.Dao">
<property name="database" value="DB2"></property>
</bean>
<bean id="service2" class="com.atguigu.spring.ioc.ref.Service">
<property name="dao" ref="dao"></property>
</bean>
------------------------------------------------------------------------------
解析:<property name="dao" ref="dao"></property> 的作用為:
Dao dao = (Dao)ctx.getBean("dao");
Service service = (Service)ctx.getBean("service2");
service.setDao(dao);
3). 可以在屬性或構造器裡包含 Bean 的宣告, 這樣的 Bean 稱為內部 Bean
<bean class="com.atguigu.spring.ioc.ref.Service" id="service">
<property name="dao">
<bean class="com.atguigu.spring.ioc.ref.Dao">
<property name="database" value="MySQL"></property>
</bean>
</property>
</bean>
解釋:類似於以下程式碼,但 dao 的這個 bean 其實是沒有 id 的,也不能被其他的 bean 來引用,也不能單獨從 IOC 容器中獲取。
<bean class="com.atguigu.spring.ioc.ref.Dao" id="dao">
<property name="database" value="MySQL"></property>
</bean>
<bean class="com.atguigu.spring.ioc.ref.Service" id="service">
<property name="dao" ref="dao"></property>
</bean>
①. 當 Bean 例項僅僅給一個特定的屬性使用時, 可以將其宣告為內部 Bean.
內部 Bean 宣告直接包含在 <property> 或 <constructor-arg> 元素裡, 不需要設定任何 id 或 name 屬性
②. 內部 Bean 不能使用在任何其他地方
4). 可以使用專用的 <null/> 元素標籤為 Bean 的字串或其它物件型別的屬性注入 null 值
<bean id="car6" class="com.atguigu.spring.ioc.Car">
<!-- 為 maxSpeed 賦值為 null, 而 value="null" 是把 null 這個字串賦給了對應的屬性 -->
<property name="corp"><null/></property>
</bean>
5). Spring 支援級聯屬性的配置。
<bean id="action3" class="com.atguigu.spring.ioc.ref.Action">
<property name="service" ref="service2"></property>
<!-- 為 service 的 dao 的 database 賦值為 ORACLE -->
<property name="service.dao.database" value="ORACLE"></property>
</bean>
6). 配置 java.util.List 型別的屬性, 需要指定 <list> 標籤, 在標籤裡包含一些元素.
這些標籤可以通過 <value> 指定簡單的常量值, 通過 <ref> 指定對其他 Bean 的引用.
通過<bean> 指定內建 Bean 定義.
通過 <null/> 指定空元素. 甚至可以內嵌其他集合.
<property name="cars">
<!-- 通過 list 指定集合屬性的值. 但 list 是一個內部 list, 不能被其他的 bean 引用. -->
<list>
<!-- ref 直接指向已有的 bean -->
<ref bean="car"/>
<ref bean="car2"/>
<ref bean="car3"/>
<!-- bean 宣告內部 bean -->
<bean class="com.atguigu.spring.ioc.Car">
<property name="brand" value="BMW"></property>
<property name="corp" value="HuaChen"></property>
<property name="maxSpeed" value="300"></property>
<property name="price" value="800000"></property>
</bean>
</list>
</property>
7). 可以使用 util schema 裡的集合標籤定義獨立的集合 Bean. 需要注意的是, 必須在 <beans> 根元素裡新增 util schema 定義
①. 匯入 util 名稱空間
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
②. 定義集合 Bean
<util:list id="cars">
<!-- ref 直接指向已有的 bean -->
<ref bean="car"/>
<ref bean="car2"/>
<ref bean="car3"/>
<!-- bean 宣告內部 bean -->
<bean class="com.atguigu.spring.ioc.Car">
<property name="brand" value="BMW"></property>
<property name="corp" value="HuaChen"></property>
<property name="maxSpeed" value="300"></property>
<property name="price" value="800000"></property>
</bean>
</util:list>
8). 配置 Map Bean
<util:map id="config">
<entry key="user" value="root"></entry>
<entry key="password" value="1230"></entry>
<entry key="driverClass" value="com.mysql.jdbc.Driver"></entry>
<entry key="jdbcUrl" value="jdbc:mysql:///test"></entry>
</util:map>
9). 配置 Properties 的屬性
<property name="properties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="b">B</prop>
<prop key="c">C</prop>
<prop key="d">D</prop>
</props>
</property>
10). 使用 p 名稱空間簡化 bean 的屬性配置:
①. 匯入 p 的名稱空間
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
②. 使用 p 名稱空間進行配置
<bean id="car7" class="com.atguigu.spring.ioc.Car"
p:brand="Mazda"
p:corp="ChangAn"
p:maxSpeed="220"
p:price="200000"/>
相關文章
- 2、Spring4之Bean的兩種配置方式SpringBean
- spring bean建立細節SpringBean
- Spring配置bean的詳細知識SpringBean
- A20 Linux 配置細節Linux
- Spring(三)屬性配置細節Spring
- Java之String類的使用細節Java
- ConcurrentHashMap之實現細節HashMap
- Spring核心原理之 IoC容器中那些鮮為人知的細節(3)Spring
- spring屬性配置的一些細節(二)Spring
- Webpack(含 4)配置詳解——關注細節Web
- Spring:Bean的scope作用域案例講解以及Bean之間的依賴和繼承(3)SpringBean繼承
- JavaScript之坑了我--事件模型細節JavaScript事件模型
- JavaScript之坑了我--函式細節JavaScript函式
- Vue 2升級 Vue 3初探小細節Vue
- 監聽配置細節引數詳解兩則
- 【Linux】關於Linux的部分細節與配置檔案Linux
- 原始碼閱讀之ArrayList實現細節原始碼
- java之集合框架使用細節及常用方法Java框架
- 小白細節思考之讀取Request.Body
- 探索 YOLO v3 實現細節 - 第3篇 網路YOLO
- 慢慢細談Android 面試的細節Android面試
- 工作細節
- 小細節
- Spring bean詳細介紹SpringBean
- mysql資料庫操作之------查的各種小細節MySql資料庫
- 學習記錄Spring Boot 記錄配置細節Spring Boot
- 揭曉Model 3電動車5大“不為人知”的細節
- JavaWeb—Servlet基礎(細節版,相當細節)JavaWebServlet
- 掌握 Swift 的字串細節Swift字串
- Layer的實現細節
- oracle中update的細節Oracle
- 原始碼閱讀之LinkedList實現細節原始碼
- 傳統D3D11程式面向VS2015編譯環境的配置修正細節3D編譯
- spring4筆記----spring4國際化Spring筆記
- 從零帶你入門stylegan~stylegan3的技術細節
- 理理Vue細節Vue
- Docker映象細節Docker
- 細節總結