依赖注入
依赖注入的作用可以做到解耦,解耦的意思是:类与类之间的关系变得松散,从硬编码表达关系变成外部文件配置。用代码的语言讲就是: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注入,其他还有构造器注入等,方式和上面写的方法类似。
关于依赖查找的内容,将在下一篇使用注解的方式一块介绍。