Spring-day02 基于xml的DI 属性注入(赋值)和构造注入 注入基本类型或者引用类型

Spring-day02 基于xml的DI

1.注入的分类

bean 实例在调用无参构造器创建对象后,就要对 bean 对象的属性进行初始化。初始化 是由容器自动完成的,称为注入。 根据注入方式的不同,常用的有两类:set 注入、构造注入。

1.1 set注入(掌握)

set 注入也叫设值注入是指,通过 setter 方法传入被调用者的实例。这种注入方式简单、 直观,因而在 Spring 的依赖注入中大量使用。

  • 简单类型的注入

    需要有set方法,没有set方法是报错的。
    Bean property 'name' is not writable or has an invalid setter method
    

  1. 项目结构如下:

  1. bean配置文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--声明student对象
            注入:就是赋值的意思
            简单类型: spring中规定java的基本数据类型和String都是简单类型。
            di:给属性赋值
            1. set注入(设值注入) :spring调用类的set方法, 你可以在set方法中完成属性赋值
             1)简单类型的set注入
                <bean id="xx" class="yyy">
                   <property name="属性名字" value="此属性的值"/>
                   一个property只能给一个属性赋值
                   <property....>
                </bean>
        -->
        <bean id="myStudent" class="com.bjpowernode.ba01.Student" >
            <property name="name" value="李四lisi" /><!--setName("李四")-->
            <property name="age" value="22" /><!--setAge(21)-->
            <property name="email" value="lisi@qq.com" /><!--setEmail("lisi@qq.com")-->
        </bean>
    
        <bean id="mydate" class="java.util.Date">
            <property name="time" value="8364297429" /><!--setTime(8364297429)-->
        </bean>
    </beans>
    
  2. 最终运行结果如下:

注入引用类型

重点是配置文件,如下 ref

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--声明student对象
        注入:就是赋值的意思
        简单类型: spring中规定java的基本数据类型和String都是简单类型。
        di:给属性赋值
        1. set注入(设值注入) :spring调用类的set方法, 你可以在set方法中完成属性赋值
         1)简单类型的set注入
            <bean id="xx" class="yyy">
               <property name="属性名字" value="此属性的值"/>
               一个property只能给一个属性赋值
               <property....>
            </bean>

         2) 引用类型的set注入 : spring调用类的set方法
           <bean id="xxx" class="yyy">
              <property name="属性名称" ref="bean的id(对象的名称)" />
           </bean>

        2.构造注入:spring调用类有参数构造方法,在创建对象的同时,在构造方法中给属性赋值。
          构造注入使用 <constructor-arg> 标签
          <constructor-arg> 标签:一个<constructor-arg>表示构造方法一个参数。
          <constructor-arg> 标签属性:
             name:表示构造方法的形参名
             index:表示构造方法的参数的位置,参数从左往右位置是 0 , 1 ,2的顺序
             value:构造方法的形参类型是简单类型的,使用value
             ref:构造方法的形参类型是引用类型的,使用ref
    -->


    <!--使用name属性实现构造注入-->
    <bean id="myStudent" class="com.bjpowernode.ba03.Student" >
        <constructor-arg name="age" value="20" />
        <constructor-arg name="school" ref="myXueXiao" />
        <constructor-arg name="name" value="周良"/>
        <constructor-arg name="home" ref="myjiaxiang"/>
    </bean>

    <!--使用index属性-->
    <bean id="myStudent2" class="com.bjpowernode.ba03.Student">
        <constructor-arg index="1" value="22" />
        <constructor-arg index="0" value="李四" />
        <constructor-arg index="2" ref="myXueXiao" />
        <constructor-arg index="3" ref="myjiaxiang" />
    </bean>

    <!--省略index-->
    <bean id="myStudent3" class="com.bjpowernode.ba03.Student">
        <constructor-arg  value="张强强" />
        <constructor-arg  value="22" />
        <constructor-arg  ref="myXueXiao" />
        <constructor-arg  ref="myjiaxiang" />

    </bean>
    <!--声明School对象-->
    <bean id="myXueXiao" class="com.bjpowernode.ba03.School">
        <property name="name" value="清华大学"/>
        <property name="address" value="北京的海淀区" />
    </bean>

    <!--声明home对象-->
    <bean id="myjiaxiang" class="com.bjpowernode.ba03.Home">
        <property name="name" value="望江县"/>
        <property name="address" value="安徽省安庆市望江县" />
        <property name="ID" value="246240" />
    </bean>
</beans>

最终结果如下:

1.2 构造注入(理解)

构造注入是指,在构造调用者实例的同时,完成被调用者的实例化。即,使用构造器设 置依赖关系。

配置文件是重点,如下:

   <constructor-arg name="name" value="周良"/>            -- 基本变量
   <constructor-arg name="home" ref="myjiaxiang"/>       -- 引用类型的变量
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--声明student对象
        注入:就是赋值的意思
        简单类型: spring中规定java的基本数据类型和String都是简单类型。
        di:给属性赋值
        1. set注入(设值注入) :spring调用类的set方法, 你可以在set方法中完成属性赋值
         1)简单类型的set注入
            <bean id="xx" class="yyy">
               <property name="属性名字" value="此属性的值"/>
               一个property只能给一个属性赋值
               <property....>
            </bean>

         2) 引用类型的set注入 : spring调用类的set方法
           <bean id="xxx" class="yyy">
              <property name="属性名称" ref="bean的id(对象的名称)" />
           </bean>

        2.构造注入:spring调用类有参数构造方法,在创建对象的同时,在构造方法中给属性赋值。
          构造注入使用 <constructor-arg> 标签
          <constructor-arg> 标签:一个<constructor-arg>表示构造方法一个参数。
          <constructor-arg> 标签属性:
             name:表示构造方法的形参名
             index:表示构造方法的参数的位置,参数从左往右位置是 0 , 1 ,2的顺序
             value:构造方法的形参类型是简单类型的,使用value
             ref:构造方法的形参类型是引用类型的,使用ref
    -->


    <!--使用name属性实现构造注入-->
    <bean id="myStudent" class="com.bjpowernode.ba03.Student" >
        <constructor-arg name="age" value="20" />
        <constructor-arg name="school" ref="myXueXiao" />
        <constructor-arg name="name" value="周良"/>
        <constructor-arg name="home" ref="myjiaxiang"/>
    </bean>

    <!--使用index属性-->
    <bean id="myStudent2" class="com.bjpowernode.ba03.Student">
        <constructor-arg index="1" value="22" />
        <constructor-arg index="0" value="李四" />
        <constructor-arg index="2" ref="myXueXiao" />
        <constructor-arg index="3" ref="myjiaxiang" />
    </bean>

    <!--省略index-->
    <bean id="myStudent3" class="com.bjpowernode.ba03.Student">
        <constructor-arg  value="张强强" />
        <constructor-arg  value="22" />
        <constructor-arg  ref="myXueXiao" />
        <constructor-arg  ref="myjiaxiang" />

    </bean>
    <!--声明School对象-->
    <bean id="myXueXiao" class="com.bjpowernode.ba03.School">
        <property name="name" value="清华大学"/>
        <property name="address" value="北京的海淀区" />
    </bean>

    <!--声明home对象-->
    <bean id="myjiaxiang" class="com.bjpowernode.ba03.Home">
        <property name="name" value="望江县"/>
        <property name="address" value="安徽省安庆市望江县" />
        <property name="ID" value="246240" />
    </bean>
</beans>

运行结果如下:

posted @ 2022-11-01 13:07  a-tao必须奥利给  阅读(106)  评论(0)    收藏  举报