Spring日常笔记注入05--构造注入

一、在Student类中定义有参构造方法

package com.example.ba03;

public class Student {
    private String name;
    private int age;

    //声明一个引用类型
    private School school;

    public void Student(){
        System.out.println("spring会调用类的无参构造方法创建对象");
    }

    public Student(String myname, int myage, School myschool){
        System.out.println("===spring会调用类的有参构造方法创建对象===");
        this.name = myname;
        this.age = myage;
        this.school = myschool;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setSchool(School school){
        this.school = school;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", school=" + school +
                '}';
    }
}

二、编写配置文件

<?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......>

      2)引用类型的set注入:spring调用类的set方法
      <bean id="xx" class="yyy">
          <property name="属性名字" ref="bean的id(对象的名称)"/>
          一个property只能给一个属性赋值
          <property......>
      </bean>

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

    <!--使用name属性实现构造注入-->
    <bean id="myStudent" class="com.example.ba03.Student">
        <constructor-arg name="myname" value="张三"/>
        <constructor-arg name="myage" value="20"/>
        <constructor-arg name="myschool" ref="myXueXiao"/>
    </bean>

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

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

 

三、编写测试类

public class MyTest03 {
    @Test
    public void test01(){
        System.out.println("===test01===");
        String config = "ba03/applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);

        Student student = (Student) ac.getBean("myStudent");
        System.out.println("student对象="+student);
    }

    @Test
    public void test02(){
        System.out.println("===test02===");
        String config = "ba03/applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);

        Student student = (Student) ac.getBean("myStudent2");
        System.out.println("student对象="+student);
    }
}

运行结果:

===test01===
===spring会调用类的有参构造方法创建对象===
===spring会调用类的有参构造方法创建对象===
student对象=Student{name='张三', age=20, school=School{name='北京大学', address='北京的海淀区'}}
===test02===
===spring会调用类的有参构造方法创建对象===
===spring会调用类的有参构造方法创建对象===
student对象=Student{name='李四', age=23, school=School{name='北京大学', address='北京的海淀区'}}

 

 

posted @ 2021-07-12 00:50  Brack_Pearl  阅读(71)  评论(0编辑  收藏  举报