1. 程式人生 > 其它 >java學習課程之bean的獲取和屬性賦值

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”

class=“com.atguigu.spring.bean.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>