Bean的装配方式——基于XML装配

Spring提供了两种基于XML的装配方式

  • 设值注入
  • 构造注入

使用设值注入需要使用<property>标签指定属性值。
Spring在实例化Bean的过程中,Spring首先会调用Bean的默认构造方法来实例化Bean对象,然后通过反射调用setter方法注入属性值,使用设值注入必须满足两个条件:

  • Bean类必须提供一个默认的无参构造方法
  • Bean类必须为需要注入的属性提供对应的setter方法

使用构造注入,在配置文件中需要使用<constructor-arg>标签指定value属性值即可。

构造器的几种注入方式:

  1. 根据索引index注入
  2. 根据参数的类型
  3. 根据参数名称注入
  4. 通过构造函数注入(原始方式)

User.java

package com.du.test;

/**
 * Created with IDEA
 *
 * @author duzhentong
 * @Date 2018/6/4
 * @Time 8:18
 */
public class User {
    private int id;
    private String name;

    public User() {
    }

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public void setId(int id) {
        this.id = id;
    }

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

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

spring配置文件:spring.xml

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

    <!--设值注入-->
    <bean id="user1" class="com.du.test.User">
        <property name="id" value="1001"/>
        <property name="name" value="小明"/>
    </bean>

    <!--构造注入 -->
    <!--1、根据索引 -->
    <bean id="user2" class="com.du.test.User">
        <constructor-arg index="0" value="1002"/>
        <constructor-arg index="1" value="小红"/>
    </bean>

    <!--2、根据参数类型 -->
    <bean id="user3" class="com.du.test.User">
        <constructor-arg type="int" value="1003"/>
        <!--<constructor-arg type="java.lang.Integer" value="1003"/>--><!--这样会报错-->
        <constructor-arg type="java.lang.String" value="小光"/>
    </bean>

    <!--3、根据参数名称 -->
    <bean id="user4" class="com.du.test.User">
        <constructor-arg name="id" value="1004"/>
        <constructor-arg name="name" value="小兰"/>
    </bean>

    <!--4、原始方式 -->
    <bean id="user5" class="com.du.test.User">
        <constructor-arg value="1005"/>
        <constructor-arg value="小飞"/>
    </bean>


</beans>

测试类:Application.java

package com.du.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created with IDEA
 *
 * @author duzhentong
 * @Date 2018/6/4
 * @Time 8:39
 */
public class Application {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
        System.out.println(ac.getBean("user1"));
        System.out.println(ac.getBean("user2"));
        System.out.println(ac.getBean("user3"));
        System.out.println(ac.getBean("user4"));
        System.out.println(ac.getBean("user5"));
    }
}

输出:

User{id=1001, name='小明'}
User{id=1002, name='小红'}
User{id=1003, name='小光'}
User{id=1004, name='小兰'}
User{id=1005, name='小飞'}

猜你喜欢

转载自blog.csdn.net/qq_38663729/article/details/80562925
今日推荐