基于XML的DI

基于XML的DI

在这里插入图片描述

bean 实例在调用无参构造器创建对象后,就要对 bean 对象的属性进行初始化。初始化 是由容器自动完成的,称为注入。

根据注入方式的不同,常用的有两类:set注入、构造注入

set注入

set注入

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

  • 简单类型
public class student {
    private String name;
    private int age;

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

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

    public void setEmail(String email){
        System.out.println("myemail:" + email);
    }


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

配置文件

 <!--声明student对象-->
    <bean id="mystudent"  class="com.bytedance.ba01.student">
        <property name="name" value="张三"/>
        <property name="age" value="12"/>
        <property name="email" value="xinghaodong123@163.com"/>
<!--说明不一定是属性才可以注入,spring关心的只是name对应的有没有set方法,有即可设置-->
    </bean>

创建java.util.Date,并设置初始的日期时间

<bean id="mydate" class="java.util.Date">
        <property name="time" value="123"/>
<!--Date类里面有setTime方法-->
    </bean>
  • 引用类型

当指定 bean 的某属性值为另一 bean 的实例时,通过 ref 指定它们间的引用关系。ref 的值必须为某 bean 的 id 值。

public class Student{
    private String name;
    private int age;
    private School school;
    
    //setter
    //toString()
}
 <bean id="mystudent" class="com.bytedance.ba02.student">
        <property name="name" value="lisi"/>
        <property name="age" value="12"/>
        <property name="email" value="22"/>

        <property name="myschool" ref="myschool"/>
    </bean>

<!-- 声明school对象-->
    <bean id="myschool" class="com.bytedance.ba02.school">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京市海淀区"/>
     </bean>

构造注入

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

在这里插入图片描述

标签中用于指定参数的属性有:

➢ name:指定参数名称。

➢ index:指明该参数对应着构造器的第几个参数,从 0 开始。不过,该属性不要也行, 但要注意,若参数类型相同,或之间有包含关系,则需要保证赋值顺序要与构造器中的参数 顺序一致。

在这里插入图片描述

引用类型属性自动注入

引用类型的自动注入
spring框架根据某些规则可以给“引用类型”赋值,自动注入,不需要程序员再给引用类型赋值了
使用的规则常用的是byName,byType
1.byName(按名称注入):Java类中引用类型的属性名称和spring容器中(配置文件)<bean>的id的名称一样,数据类型一样,这样的容器中的bean,spring能够赋值给引用类型
    语法规则:
    <bean id="xx",class="yy" autowire="byname">
        简单类型属性赋值
     </bean>

2.byType(按照类型注入):Java类中引用类型的数据类型和spring容器中(配置文件)<bean>的class属性是同源关系,这样的bean,spring能够赋值给引用类型
    同源就是一类的意思:
    1.java类中引用类型的数据类型和bean的class的值是一样的
    2.Java类中的引用类型的数据类型和bean的class的值是父子类关系
    3.java类中的引用类型的数据类型和bean的class的值是接口与实现类的关系

在这里插入图片描述

具体说明:

  • byName方式自动注入

    当配置文件中被调用者 bean 的 id 值与代码中调用者 bean 类的属性名相同时,可使用 byName 方式,让容器自动将被调用者 bean 注入给调用者 bean。容器是通过调用者的 bean 类的引用类型属性名与配置文件的被调用者 bean 的 id 进行比较而实现自动注入的。
    在这里插入图片描述

  • byType自动注入

    使用 byType 方式自动注入,要求:配置文件中被调用者 bean 的 class 属性指定的类, 要与代码中调用者 bean 类的某引用类型属性类型同源。即要么相同,要么有 is-a 关系(子 类,或是实现类)。但这样的同源的被调用 bean 只能有一个。多于一个,容器就不知该匹配哪一个了。

    在这里插入图片描述

如果出现同源类在XML文件中出现两个类,只能保留一个,否则会出现BeanDefinitionParsingException异常

为应用指定多个Spring配置文件

 spring-total表示主配置文件:用以包含其他的配置文件,主配置文件一般是不定义对象的。
       语法:<import resource="其他配置文件的路径"/>
       关键字:“classpath”:表示类路径(class文件所在的目录的target路径下;)
       在spring的配置文件中要指定其他文件的位置,需要使用classpath,告诉spring到哪里去加载读取文件
        
在具有包含关系的配置文件中,可以使用通配符(*:表示任意字符) 且这些文件必须在resources下面的一级目录下 。 
使用多配置文件时,不能将主文件自身包括进自生主文件

在这里插入图片描述
想要了解更多内容,欢迎访问我的博客呀!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值