什么是依赖注入

  • 先讲讲什么是依赖

比如一个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>

 

上一篇:继承和接口


下一篇:面向对象的例子