Spring基础篇:基于XML的依赖注入(IOC)

192 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情

依赖注入

依赖注入的作用可以做到解耦,解耦的意思是:类与类之间的关系变得松散,从硬编码表达关系变成外部文件配置。用代码的语言讲就是:A类要依赖B类,A类不再直接创建B类,而是把这种依赖关系配置在外部xml文件中。而这个xml文件是由Spring容器读取配置信息,然后管理bean类。

例子展开

例子:人与小狗,两个类。人养了一只小狗 在代码中可以这样做。

  • Person.class表示人 类
public class Person {
    private String name;
    private Pet pet;
    
    // getter and setter
}

但是限制死Dog类总归是不太好的,应该要有抽象类的思维。

public abstract class Pet {
    private String name;
}

准备狗

public class Dog extends Pet{

}

硬编码的形式是这样表达人与狗的关系的:

Person person = new Person();
person.setPet(new Dog());

我们说过这样的耦合性很高,因为修改人的Pet属性需要重新编译代码。如果Person类改为数据库类呢?而Pet属性是一些连接设置相关的配置,这样代码的耦合性就太高啦,对于修改极不方便。

让我们看看Spring是如何做的,我们知道Spring是可以以外置配置文件驱动的,所以我们可以在配置文件中做这个属性配置,这个动作也叫依赖注入

<bean id="dog" class="juejin.di.bean.Dog"></bean>

<bean id="person" class="juejin.di.bean.Person">
    <property name="pet" ref="dog"></property>
    <property name="name" value="Chengyunlai"></property>
</bean>

注意看这里的标签和属性:<property>,它表示的是类里面定义的属性,它有两个主要的属性,一个是name,一个是ref或者是value

  • name:它对应的是该类中的set方法。这里的pet对应的是setPet中的Pet
  • ref:它的内容是指向一个类,里面放的是其他定义类的id名称
  • value:对应一些常量,例如字符串、数值。

这里我们演示的setter注入,其他还有构造器注入等,方式和上面写的方法类似。

关于依赖查找的内容,将在下一篇使用注解的方式一块介绍。