怎么样理解依赖注入?

上一篇 / 下一篇  2008-03-26 02:27:57 / 个人分类:Guice

假设你编写了两个类,一个是人(Person),一个是手机(Mobile)。
人有时候需要用手机打电话,需要用到手机的dialUp方法。
传统的写法是这样:
Java code
public class Person{
    public boolean makeCall(long number){
        Mobile mobile=new Mobile();
        return mobile.dialUp(number);
    }
}

也就是说,类Person的makeCall方法对Mobile类具有依赖,必须手动生成一个新的实例new   Mobile()才可以进行之后的工作。
依赖注入的思想是这样,当一个类(Person)对另一个类(Mobile)有依赖时,不再该类(Person)内部对依赖的类(Moblile)进行实例化,而是之前配置一个beans.xml,告诉容器所依赖的类(Mobile),在实例化该类(Person)时,容器自动注入一个所依赖的类(Mobile)的实例。
接口:
Java code
public Interface MobileInterface{
    public boolean dialUp(long number);
}

Person类:
Java code
public class Person{
    private MobileInterface mobileInterface;
    public boolean makeCall(long number){
        return this.mobileInterface.dialUp(number);
    }
    public void setMobileInterface(MobileInterface mobileInterface){
        this.mobileInterface=mobileInterface;
    }
}

xml文件中配置依赖关系
Java code
<bean id="person" class="Person">
    <property name="mobileInterface">
        <ref local="mobileInterface"/>
    </property>    
</bean>
<bean id="mobileInterface" class="Mobile"/>


这样,Person类在实现拨打电话的时候,并不知道Mobile类的存在,它只知道调用一个接口MobileInterface,而MobileInterface的具体实现是通过Mobile类完成,并在使用时由容器自动注入,这样大大降低了不同类间相互依赖的关系。

TAG:

引用 删除 客人   /   2008-08-26 10:52:30
引用 删除 Guest   /   2008-07-25 16:17:02
好!
引用 删除 vv   /   2008-05-23 01:57:40
非常感谢你的帖子,通俗易懂
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-07  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 18137
  • 日志数: 171
  • 影音数: 3
  • 建立时间: 2008-02-28
  • 更新时间: 2008-05-19

RSS订阅

Open Toolbar