• 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

  • 相关阅读:
    关闭页面的Js方法
    正则
    css3颜色渐变
    HTML learning
    jquery dwn 开发学习
    前人栽树后人乘凉
    剑指offer-面试题53_2-0~n-1中缺失的数字-二分查找
    剑指offer-面试题53_1-在排序数组中查找数字-二分查找
    堆排序
    剑指offer-面试题52-两个链表的第一个公共节点-链表
  • 原文地址:https://www.cnblogs.com/xiaofengzai/p/12640003.html
Copyright © 2020-2023  润新知