- 先讲讲什么是依赖
比如一个Person类里面有个eat方法,eat方法里面有个food引用类,那么就可以说Person类依赖food类。
- 原始方法依赖
person类的eat方法要引用food类,那么就得由Person类创建food类,并且由Person类负责food类的整个生命周期的管理。
这样带来的问题就是,耦合度高,不易维护。想再吃个汉堡(food),还要去修改Person的代码。
public class Person{
...
public void eat(f){
food f=new food("hamburger");
f.原材料;
f.制作方法;
}
}
- 如何实现依赖注入
将具体类的依赖转为抽象类的依赖。于是有两种方式将抽象类注入进来。一种是构造方法注入,另一种是set方法(属性)注入。
public class Person{
private food f;
//方式一:构造方法注入food
public Person(food onefood){
f=onefood;
}
public void eat( food f){
f.原材料;
f.制作方法;
}
}
public class Person{
private food f;
public Person(){}
//方式二:set方式注入food
public void set(food onefood){
f=onefood;
}
public void eat(food f){
f.原材料;
f.制作方式;
}
}
- 那么在spring中的注入是
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="onefood" class="food"> <!-onefood类是food的一个实现-->
</bean>
<bean id="onePerson" class="Person"> <!--本例以属性方式(set方式)注入为例 -->
<property name="food">
<ref bean="onefood"></ref>
</property>
</bean>
</beans>
<?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-3.0.xsd">
//构造方式注入
<bean id="person" class="Person">
<constructor-arg ref="onefood"/>
</bean>
<bean id="onefood" class="food">
</bean>
</beans>