二、XML配置文件实现DI

二、XML配置文件实现DI

1、di:依赖注入,表示创建对象,给属性赋值


2、di实现有两种方式:

  1. 在spring配置文件中,使用标签和属性完成,叫做基于XML的di实现
  2. 使用注解,叫做基于注解的di实现

3、di的语法分类

  1. set注入(设置注入):spring调用类的set方法赋值[实际使用超80%]
  2. 构造注入:spring调用类的有参构造完成赋值

4、实现步骤

  1. 创建maven项目
  2. 加入maven依赖
    1. spring的依赖,版本5.2.5
    2. junit依赖
  3. 创建类(接口及其实现类)
    1. 和没有使用框架一样,就是一个普通类
  4. 创建spring需要使用的配置文件
    1. 声明类的信息,这些类由spring创建管理
    2. 通过spring语法完成属性赋值
  5. 测试spring创建的对象

5、项目结构

在这里插入图片描述

注:pom.xml同一.2.1

1、Set注入

ba01.Student.java
package hom.wang.ba01;
/* setter/getter省略*/
public class Student {
    private String name;
    private int age;
}
ba01.applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
        声明student对象
        di给属性赋值
        1、set注入
    -->
    <bean id="student" class="hom.wang.Student">
        <property name="name" value="丽丽" />
        <property name="age" value="24" />
        <!--set注入只关心set,不关心属性-->
        <property name="email" value="lili@xx.com" />
    </bean>

    <bean id="date" class="java.util.Date">
        <property name="time" value="1553710877411" />
    </bean>
</beans>
MyTest.java
package hom.wang;
import hom.wang.ba01.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Date;
public class MyTest {

    @Test
    public void test_01(){
        ApplicationContext applicationContext = 
            new ClassPathXmlApplicationContext("ba01/applicationContext.xml");
        Student student = (Student) applicationContext.getBean("student");
        System.out.println(student);

        Date date = (Date) applicationContext.getBean("date");
        System.out.println(date);
    }
}

2、构造注入

ba02.applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
        声明student对象
        2、构造注入

        <constructor-arg> 标签属性:
            name:形参名
            index:参数位置,从左往右为0/1/2/3...
            value:值
            ref:引用
    -->
    <!--使用name属性实现构造注入-->
    <bean id="cnstudent" class="hom.wang.ba01.Student">
        <constructor-arg name="name" value="梅梅"/>
        <constructor-arg name="age" value="25" />
    </bean>

    <!--使用index属性实现构造注入-->
    <bean id="cistudent" class="hom.wang.ba01.Student">
        <constructor-arg index="0" value="梅梅"/>
        <constructor-arg index="1" value="25" />
    </bean>

    <bean id="file" class="java.io.File">
        <constructor-arg name="parent" 
                         value="E:\CodeBox\Spring\st-02-di-xml\target\classes"/>
        <constructor-arg name="child" value="readme.txt" />
    </bean>
</beans>

3、自动注入

ba03.School.java
package hom.wang.ba03;
public class School {
    private String name;
    private int level;
}
ba03.Student.java
package hom.wang.ba03;
public class Student {
    private String name;
    private int age;
    private School school;
}
ba03.applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
        自动注入 [引用类型的自动注入:spring框架根据其相应规则可以给引用类型注入]
        规则:byName和byType
        1、byName:按名称注入,java类中引用类型的属性名和spring配置文件<bean>的id名称一样且数据类型是一致的,spring容器就可赋值给引用类型
            语法: <bean id="xxx" class="xxx.xxx" autowire="byName">
        2、byType:按类型注入,java类中引用类型的数据类型和和spring配置文件<bean>的class属性是同源关系的,spring容器就可赋值给引用类型
            同源(没错就是你想的那样!!!):
                1、类型一致
                2、继承关系
                3、实现关系
            语法: <bean id="xxx" class="xxx.xxx" autowire="byType">
    -->
    <!--byName-->
    <bean id="zbnstudent" class="hom.wang.ba03.Student" autowire="byName">
        <property name="name" value="梅梅" />
        <property name="age" value="25" />
    </bean>

    <bean id="school" class="hom.wang.ba03.School">
        <constructor-arg name="name" value="XXX小学" />
        <constructor-arg name="level" value="2" />
    </bean>

    <!--byType-->
    <bean id="zbtstudent" class="hom.wang.ba03.Student" autowire="byType">
        <property name="name" value="呱呱" />
        <property name="age" value="22" />
    </bean>

    <!--<bean id="file" class="java.io.File">
        <constructor-arg name="parent" value="E:\CodeBox\Spring\st-02-di-xml\target\classes"/>
        <constructor-arg name="child" value="readme.txt" />
    </bean>-->
</beans>

4、多配置文件的整合

ba04.spring-school.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--只包含学校类型-->
    <bean id="school" class="hom.wang.ba04.School">
        <constructor-arg name="name" value="XXX小学" />
        <constructor-arg name="level" value="2" />
    </bean>
</beans>
ba04.spring-student.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--只包含学生类型-->
    <bean id="zbtstudent" class="hom.wang.ba04.Student" autowire="byType">
        <property name="name" value="梅梅" />
        <property name="age" value="25" />
    </bean>
</beans>
ba04.springTotal.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--
        包含关系的配置文件:
        表示主配置文件:包含其他配置文件
        主配置文件一般不配置bean,只做配置的整合
        语法:
            <import resource="其他配置文件路径" />
        关键字:
            classpath:表示类路径(class文件所在路径)
    -->
    <!--加载文件列表-->
    <!--<import resource="classpath:ba04/spring-student.xml" />
    <import resource="classpath:ba04/spring-school.xml" />-->

    <!--除了单独引入还可以使用通配符:*-->
    <import resource="classpath:ba04/spring-*.xml" />

</beans>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯纯的小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值