首先
一个类A的定义里定义了一个属性 这个属性是另一个类B的一个实例
如果我们NEW一个类A的实例,那么初始化这个属性的时候就要在代码里手动把一个类B的实例赋给这个A的实例的这个属性
如果不手动赋值 而让spring通过读取xml的形式把自己代理时new好的类B的实例赋给A的实例的这个属性,就叫依赖注入
如果B是一个类的话看不出什么优势
但是如果B是一个接口的话 当要A的这个属性从B的一个实现改成另一个实现的时候,就不必改代码 只要改xml就行
class A{
public B b;
}
interface B {
}
class B1 implements B{
}
class B2 implements B{
}
如果不用依赖注入
B b = new B1();
A a = new A();
a.b=b;
更改需求时 代码改为
B b = new B2();
A a = new A();
a.b=b;
如果使用依赖注入
<bean id='b1' class ='B1'></bean>
<bean id='b2' class ='B2'></bean>
<bean id='a' class ='A'><property name='b'><ref bean="b1" /></property></bean>
更改需求时 代码改为
<bean id='b1' class ='B1'></bean>
<bean id='b2' class ='B2'></bean>
<bean id='a' class ='A'><property name='b'><ref bean="b2" /></property></bean>