Spring的IOC容器學習筆記

(一)Spring的IOC學習

  在applicationContext.xml來配置bean,通過該介面,在主程式中,可以指定初始化的對象,不需要在進行賦值操作,直接在xml里配置好。

接下來分享的是bean配置的多種方法:

①通過類的id獲取bean

<bean id="user" class="com.author.bean.user">          <property name="name" value="Spring"></property>          <property name="age" value="18"></property>          <property name="sex" value="男"></property>  </bean>

在主函數中,通過容器里的id來獲取bean對象

ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");  user beanUser=(user)aContext.getBean("user");  beanUser.print();

輸出該對象的資訊:

 

 

 ②通過類型獲取bean,缺點是只能是一個該類型的bean對象,如果有多個則會出錯,多個可以通過id的方式來進行獲取

例如上面的user對象,在主函數中可以這樣獲取:

ApplicationContext aContext=new ClassPathXmlApplicationContext("applicationContext.xml");  user beanUser=aContext.getBean(user.class);  beanUser.print();

得到的結果和上面的一樣

二、給bean的屬性賦值多種操作

①直接通過<property name=”name” value=”Spring”></property>利用name,value的方式進行賦值

②通過構造器進行賦值,前提在bean類中有該構造函數

<bean id="user03" class="com.author.bean.user">          <constructor-arg name="name" value="小明"></constructor-arg>         <constructor-arg name="age" value="18"></constructor-arg>         <constructor-arg name="sex" value="男"></constructor-arg>  </bean>

還可以直接省略name屬性:

<!-- 省略name屬性 -->      <bean id="user04" class="com.author.bean.user">          <constructor-arg value="校花"></constructor-arg>          <constructor-arg value="10"></constructor-arg>          <constructor-arg value="女"></constructor-arg>      </bean>

通過索引值指定參數位置

<bean id="book" class="com.atguigu.spring.bean.Book" >             <constructor-arg value= "10010" index ="0"/>             <constructor-arg value= "Book01" index ="1"/>             <constructor-arg value= "Author01" index ="2"/>             <constructor-arg value= "20.2" index ="3"/>       </bean >

通過類型不同區分重載的構造器

<bean id="book" class="com.atguigu.spring.bean.Book" >        <constructor-arg value= "10010" index ="0" type="java.lang.Integer" />        <constructor-arg value= "Book01" index ="1" type="java.lang.String" />        <constructor-arg value= "Author01" index ="2" type="java.lang.String" />        <constructor-arg value= "20.2" index ="3" type="java.lang.Double" />  </bean >

p名稱空間:為了簡化XML文件的配置,越來越多的XML文件採用屬性而非子元素配置資訊。

需要導入:xmlns:p=”http://www.springframework.org/schema/p”

<bean      id="studentSuper"      class="com.atguigu.helloworld.bean.Student"      p:studentId="2002" p:stuName="Jerry2016" p:age="18" />

三、內部bean對象以及引用對象

通過<null/>指定空元素

引用對象的使用:ref=“引用外部對象的id”

<bean id="car01" class="com.author.bean.car">          <constructor-arg value="寶馬" ></constructor-arg>           <constructor-arg value="藍白色"></constructor-arg>            <constructor-arg value="30000"></constructor-arg>      </bean>        <bean id="user05" class="com.author.bean.user">          <property name="name">              <null></null>          </property>          <!-- ref引用的是外部的bean -->          <property name="car" ref="car01"></property>      </bean>

內部bean對象:相當於car=new car(),car對象在user對象里

<bean id="car01" class="com.author.bean.car">          <constructor-arg value="寶馬" ></constructor-arg>           <constructor-arg value="藍白色"></constructor-arg>            <constructor-arg value="30000"></constructor-arg>      </bean>        <bean id="user05" class="com.author.bean.user">          <property name="name">              <null></null>          </property>          <!-- 相當於car=new car() 引用內部bean -->          <property name="car">              <bean class="com.author.bean.car">                  <property name="name" value="自行車"></property>              </bean>          </property>      </bean>

四、集合屬性

①List和map

List集合里包括:一個自定義的對象,一個引用對象。

  配置java.util.List類型的屬性,需要指定<list>標籤,在標籤里包含一些元素。

  這些標籤可以通過<value>指定簡單的常量值,通過<ref>指定對其他Bean的引用。

  通過<bean>指定內置bean定義。通過<null/>指定空元素。

Map集合里包括:2個value,一個引用,一個自定義對象,都對應著不同的key值

  <map>標籤里可以使用多個<entry>作為子標籤。每個條目包含一個鍵和一個值。

 

  必須在<key>標籤里定義鍵。

 

  因為鍵和值的類型沒有限制,所以可以自由地為它們指定<value>、<ref>、<bean>或<null/>元素。

 

  可以將Map的鍵和值作為<entry>的屬性定義:簡單常量使用key和value來定義;bean引用通過key-ref和value-ref屬性定義。

 

<bean id="refbook" class="com.author.bean.Book">          <property name="name" value="西廂記"></property>      </bean>          <bean id="user06" class="com.author.bean.user">          <property name="books">              <list>                  <!-- list標籤體中添加每一個元素 -->                  <bean  class="com.author.bean.Book">                      <property name="name" value="西遊記"></property>                      <property name="author" value="吳承恩"></property>                      <property name="price" value="80"></property>                  </bean>                  <ref bean="refbook"></ref>              </list>          </property>          <property name="maps">              <map>                  <entry key="key01" value="張三"></entry>                  <entry key="key02" value="18"></entry>                  <entry key="key03" value-ref="refbook"></entry>                  <entry key="key04">                      <bean class="com.author.bean.car">                          <property name="name" value="寶馬">                          </property>                      </bean>                  </entry>              </map>          </property>      </bean>

在主函數中,輸出結果:

user beanUser2=(user)aContext.getBean("user06");          System.out.println(beanUser2.books);          System.out.println(beanUser2.maps);

結果為:

 

 

 ②Properties

使用<props>定義java.util.Properties,該標籤使用多個<prop>作為子標籤。每個<prop>標籤必須定義key屬性

 

<bean class="com.atguigu.spring.bean.DataSource" id="dataSource">      <property name="properties">          <props>              <prop key="userName">root</prop>              <prop key="password">root</prop>              <prop key="url">jdbc:mysql:///test</prop>              <prop key="driverClass">com.mysql.jdbc.Driver</prop>          </props>      </property>  </bean>

 

③集合類型的bean

如果只能將集合對象配置在某個bean內部,則這個集合的配置將不能重用。我們需要將集合bean的配置拿到外面,供其他bean引用。

配置集合類型的bean需要引入util名稱空間:xmlns:util=”http://www.springframework.org/schema/util”

 

<util:map id="myMap">          <entry key="key01" value="張三"></entry>                  <entry key="key02" value="18"></entry>                  <entry key="key03" value-ref="refbook"></entry>                  <entry key="key04">                      <bean class="com.author.bean.car">                          <property name="name" value="寶馬">                          </property>                      </bean>                  </entry>      </util:map>        <util:list id="myList">          <bean class="com.author.bean.Book"></bean>          <value>12</value>          <ref bean="myMap"></ref>      </util:list>

 

五、級聯屬性

含義:可以控制屬性的屬性

可以改變user07下的car的price屬性,如果car為引用對象,那麼引用對象也會被修改

<!-- 級聯屬性可以控制屬性的屬性 -->      <bean id="user07" class="com.author.bean.user">          <property name="car" ref="car01"></property>          <property name="car.price" value="900000"></property>      </bean>

 

————–這就是今天分享的bean的配置操作。

明天學習:利用工廠來創建bean