欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

依赖注入

程序员文章站 2023-12-28 10:43:58
...

概念

什么是依赖

我所需要的 但不是我的 (为了方面讨论 这里的我称之为Consumer 依赖称之为Provider)

例如 空气 食物

什么是依赖注入

互动问答 什么是依赖注入? (将Consumer所依赖的Provider传入到Consumer中)

例如 吃饭 输液

分类

根据实现分类

  • 运行时依赖注入
依赖反射 影响性能

互动问答 什么是反射? (程序在运行时获取和修改自身状态和行为的能力)

  • 编译时依赖注入
编译时检查 更安全

不依赖反射 性能高

根据注入方法

  • 构造器注入
public class Consumer {
    private final IProvider mProvider;

    public Consumer(IProvider provider) {
        mProvider = provider;
    }
}
  • Setter注入
public class Consumer {
    private final IProvider mProvider;

    public void setProvider(IProvider provider) {
        mProvider = provider;
    }
}

优点

  • 解耦 不用改变Consumer 就可以改变Provider
例如 近视眼镜是松耦合的 人造器官是紧耦合的
  • 控制倒转
针对接口编程 不要对实现编程
public class Consumer {
    private final IProvider mProvider;

    public Consumer(IProvider provider) {
        mProvider = provider;
    }
}
  • AOP

互动问答 综上所述DI体现了哪些设计原则? (单一职责原则/开放封闭原则/依赖倒转原则)

缺点

  • Consumer与Provider耦合 => Consumer和Provider都与依赖注入系统耦合 => 不透明 给逻辑和调试带来成本

参考

上一篇:

下一篇: