Spring的IOC容器學習筆記

(一)Spring的IOC學習java

  在applicationContext.xml來配置bean,經過該接口,在主程序中,能夠指定初始化的對象,不須要在進行賦值操做,直接在xml裏配置好。mysql

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

①經過類的id獲取beansql

<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對象app

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

輸出該對象的信息:函數

 

 

 ②經過類型獲取bean,缺點是隻能是一個該類型的bean對象,若是有多個則會出錯,多個能夠經過id的方式來進行獲取學習

例如上面的user對象,在主函數中能夠這樣獲取:ui

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

獲得的結果和上面的同樣url

2、給bean的屬性賦值多種操做spa

①直接經過<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" />

3、內部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>

4、集合屬性

①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>

 

5、級聯屬性

含義:能夠控制屬性的屬性

能夠改變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

相關文章
相關標籤/搜索