依赖注入

概念

什么是依赖

我所需要的 但不是我的 (为了方面讨论 这里的我称之为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都与依赖注入系统耦合 => 不透明 给逻辑和调试带来成本

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容