Spring4---通过xml文件配置Bean

基础配置

  1. 在spring配置文件中配置Bean
    • 使用<bean>标签配置
<!--配置java程序类-->
<bean id="helloworld" class="mao.shu.spring.HelloWorld">
    <!--类中的属性-->
    <property name="userName" value="xiemaoshu"/>
</bean>
  • 标签属性说明
    1. id:IOC容器中的唯一标识符,可以自定义,但不允许重复,通过BeanFactory类中的getBean()方法,可以利用id值来获取java类对象
    2. class:java类的全名,IOC容器通过反射来实例化java程序类
    3. <property>标签:描述类中的成员变量,通过"name"属性指定类成员变量,通过value属性为类成员变量复制

在这里插入图片描述

Spring容器

在这里插入图片描述

ApplicationContext

在这里插入图片描述

容器操作类继承关系

在这里插入图片描述

依赖注入的方式(为java类中成员变量赋值的方式)

1.

属性注入

在这里插入图片描述

<!--配置java程序类-->
<bean id="helloworld" class="mao.shu.spring.HelloWorld">
    <!--类中的属性-->
    <property name="userName" value="xiemaoshu"/>
</bean>

通过构造方法注入

  • 发现问题

  • java程序类中可以定义构造方法,java类中的成员变量也可以通过构造方法赋值,并且java类支持定义多个构造方法.

  • 那么在通过Spring的构造方法注入的时候是否要注意,如何配置不同的构造方法?

  • java程序类

package mao.shu.spring;

public class Person {
    //类成员
    private Integer id;
    private String name;
    private Integer age;
    private double balance;

    //构造方法

//    两个带有三个参数的构造方法


    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Person(Integer id, String name, double balance) {
        this.id = id;
        this.name = name;
        this.balance = balance;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", balance=" + balance +
                '}';
    }
}

  • 配置构造器注入,修改spring-config.xml文件
    • 此时配置两个构造器注入,第一个构造器赋值的是"name",“age”,和"id"属性
    • 另一个构造器赋值的是"id","name"和"balance"属性
    • 现在希望能够通过两个构造器得到两个实例化对象
    • 旧版本的spring中<constructor-arg>标签之中不允许有name属性,在新版本中可以存在有name属性了
<bean id="person1" class="mao.shu.spring.Person">
    <constructor-arg name="id" value="9527"/>
    <constructor-arg name="name" value="xiemaoshu"/>
    <constructor-arg name="age" value="22"/>
</bean>

<bean id="person2" class="mao.shu.spring.Person">
    <constructor-arg name="id" value="789"/>
    <constructor-arg name="name" value="测试构造器注入"/>
    <constructor-arg name="balance" value="5000.54"/>
</bean>
  • 测试方法
public class Begin {
    public static void main(String[]args){
        ApplicationContext app =
                new ClassPathXmlApplicationContext("spring-config.xml");

        Person person1 = (Person) app.getBean("person1");
        Person person2 = (Person) app.getBean("person2");

        System.out.println("persion1 = " + person1);
        System.out.println("persion2 = " + person2);

    }
}

  • 正确赋值

在这里插入图片描述

  • 除了通过"name"来匹配参数,还可以通过索引来匹配参数
<bean id="person1" class="mao.shu.spring.Person">
    <constructor-arg name="id" value="9527" index="0"/>
    <constructor-arg name="name" value="xiemaoshu" index="1"/>
    <constructor-arg name="age" value="22" index="2"/>
</bean>
  • 还可以通过类型匹配参数
<bean id="person2" class="mao.shu.spring.Person">
    <constructor-arg name="id" value="789" type="java.lang.Integer"/>
    <constructor-arg name="name" value="测试构造器注入" type="java.lang.String"/>
    <constructor-arg name="balance" value="5000.54" type="double"/>
</bean>

猜你喜欢

转载自blog.csdn.net/qq_43386754/article/details/88047852