java學習課程之bean的獲取和屬性賦值
通過型別獲取bean
- 從IOC容器中獲取bean時,除了通過id值獲取,還可以通過bean的型別獲取。但如果同一個型別的bean在XML檔案中配置了多個,則獲取時會丟擲異常,所以同一個型別的bean在容器中必須是唯一的。
HelloWorld helloWorld = cxt.getBean(HelloWorld.class); |
- 或者可以使用另外一個過載的方法,同時指定bean的id值和型別
HelloWorld helloWorld = cxt.getBean(“helloWorld”,HelloWorld.class); |
給bean的屬性賦值
依賴注入的方式
1. 通過bean的setXxx()方法賦值
Hello World中使用的就是這種方式
2. 通過bean的構造器賦值
- Spring自動匹配合適的構造器
<beanid=“book”class=“com.atguigu.spring.bean.Book”> <constructor-argvalue=“10010”/> <constructor-argvalue=“Book01”/> <constructor-argvalue=“Author01”/> <constructor-argvalue=“20.2”/> </bean> |
- 通過索引值指定引數位置
<beanid=“book”class=“com.atguigu.spring.bean.Book”> <constructor-argvalue=“10010”index=“0”/> <constructor-argvalue=“Book01”index=“1”/> <constructor-argvalue=“Author01”index=“2”/> <constructor-argvalue=“20.2”index=“3”/> </bean> |
- 通過型別區分過載的構造器
<beanid=“book” <constructor-argvalue=“10010”index=“0”type=“java.lang.Integer”/> <constructor-argvalue=“Book01”index=“1”type=“java.lang.String”/> <constructor-argvalue=“Author01”index=“2”type=“java.lang.String”/> <constructor-argvalue=“20.2”index=“3”type=“java.lang.Double”/> </bean> |
p名稱空間
為了簡化XML檔案的配置,越來越多的XML檔案採用屬性而非子元素配置資訊。Spring 從2.5版本開始引入了一個新的p名稱空間,可以通過<bean>元素屬性的方式配置Bean 的屬性。
使用p名稱空間後,基於XML的配置方式將進一步簡化。
<bean id=“studentSuper” class=“com.atguigu.helloworld.bean.Student” p:studentId=“2002”p:stuName=“Jerry2016”p:age=“18”/> |
可以使用的值
1. 字面量
- 可以使用字串表示的值,可以通過value屬性或value子節點的方式指定
- 基本資料型別及其封裝類、String等型別都可以採取字面值注入的方式
- 若字面值中包含特殊字元,可以使用<![CDATA[]]>把字面值包裹起來
2. null值
<beanclass=“com.atguigu.spring.bean.Book”id=“bookNull”> <propertyname=“bookId”value=“2000”/> <propertyname=“bookName”> <null/> </property> <propertyname=“author”value=“nullAuthor”/> <propertyname=“price”value=“50”/> </bean> |
3. 給bean的級聯屬性賦值
<bean id=”action” class=”com.atguigu.spring.ref.Action”> <property name=”service” ref=”service”/> <!– 設定級聯屬性(瞭解) –> <property name=”service.dao.dataSource” value=”DBCP”/> </bean> |
4. 外部已宣告的bean
<beanid=“shop”class=“com.atguigu.spring.bean.Shop”> <propertyname=“book”ref=“book”/> </bean> |
5. 內部bean
當bean例項僅僅給一個特定的屬性使用時,可以將其宣告為內部bean。內部bean宣告直接包含在<property>或<constructor-arg>元素裡,不需要設定任何id或name屬性
內部bean不能使用在任何其他地方
<beanid=“shop2”class=“com.atguigu.spring.bean.Shop”> <propertyname=“book”> <beanclass=“com.atguigu.spring.bean.Book”> <propertyname=“bookId”value=“1000”/> <propertyname=“bookName”value=“innerBook”/> <propertyname=“author”value=“innerAuthor”/> <propertyname=“price”value=“50”/> </bean> </property> </bean> |