zoukankan      html  css  js  c++  java
  • 深入理解 IoC、DI

    本文转载自博客:https://www.cnblogs.com/xinhuaxuan/p/6132372.html

    1、控制反转:谁控制谁?控制什么?为何叫反转(对应于正向)?哪些方面反转了?为何需要反转?

    • 谁控制谁?

    IoC/DI 容器控制应用程序。

    • 控制什么?

    IoC/DI 容器控制对象本身的创建、实例化;IoC/DI 容器控制对象之间的依赖关系。

    • 为何叫反转(对应于正向)?

    因为现在应用程序不能主动去获取外部资源了,而是被动等待 IoC/DI 容器给它注入它所需要的资源,所以称之为反转。

    • 哪些方面反转了?

    创建对象的方式;程序获取资源的方式。

    • 为何需要反转?

    引入 IoC/DI 容器过后,体系更为松散,而且管理更有序;类之间真正实现了松散耦合。

    2、依赖:什么是依赖(按名称理解、按动词理解)?谁依赖于谁?为什么需要依赖?依赖什么东西?

    • 什么是依赖(按名称理解、按动词理解)?

    按名称理解:依赖关系;按动词理解:依赖的动作。

    • 谁依赖于谁?

    应用程序依赖于 IoC/DI 容器。

    • 为什么需要依赖?

    因为发生了反转,应用程序依赖的资源都是 IoC/DI 容器里面。

    • 依赖什么东西?

    应用程序依赖于 IoC/DI 容器,依赖 IoC/DI 容器为它注入所需要的资源(如:依赖关系)。

    3、注入:谁注入于谁?注入什么东西?为何要注入?

    • 谁注入于谁?

    IoC/DI 容器注入于应用程序。

    • 注入什么东西?

    注入应用程序需要的外部资源(如:依赖关系)。

    • 为何要注入?

    因为程序要正常运行需要这些外部资源。

    4、依赖注入和控制反转是同一概念吗?

    • 不是同一概念,但实际上它们描述的是同一件事情,只不过是从不同角度来说的:控制反转是从 IoC/DI 容器的角度;依赖注入是从应用程序的角度。
    • 控制反转的描述:IoC/DI 容器反过来控制应用程序,控制应用程序锁所需要的外部资源(如:外部资源)。
    • 依赖注入的描述:应用程序依赖 IoC/DI 容器,依赖它注入所需要的外部资源。

    5、参与者都有哪些?

    • IoC/DI 容器、应用程序。

    6、IoC/DI 是什么?能做什么?怎么做?用在什么地方?

    • IoC/DI 是什么?

    IoC:就是使用 IoC/DI 容器反过来控制应用程序所需要的外部资源,这样的一种程序开发思想。
    DI:就是应用程序依赖 IoC/DI 容器来注入所需要的外部资源,这样一种程序的开发思想。

    • 能做什么?

    松散耦合对象。

    • 怎么做?

    可以选择使用 Spring 框架,里面有大量已经实现了的 IoC/DI 容器。

    • 用在什么地方?

    凡是程序里面需要使用外部资源的情况,都可以考虑使用 IoC/DI 容器。

    7、什么是外部资源?

    • 对于一个类来讲,外部资源就是指在本类内部不能得到或实现的东西,比如:在类里面需要读取一个配置文件,那么这个配置文件就相当于这个类的外部资源。又比如:A 类里面要调用 B 类,那么对于 A 类来讲 B 类就是其外部资源。

    8、什么是 IoC 容器?

    • 简单理解就是:实现 IoC 思想,并提供对象创建、对象装配以及对象生命周期管理的软件就是 IoC 容器。
    • 对 IoC 的理解:

    a、应用程序无需主动 new 对象,而是描述对象应该如何被创建。
    b、应用程序不需要主动装配对象之间的依赖关系,而是描述需要哪个服务,IoC 容器会帮你装配,你只需被动接受装配。
    c、主动变被动,是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则。

    9、使用 IoC/DI 容器开发需要改变思路

    • 应用程序不主动创建对象,但要描述创建它们的方式。
    • 在应用程序代码中不直接进行服务的装配,但是要描述哪一个组件需要哪一项服务,由容器负责将它们装配在一起。也就是说:所有的组件都是被动的,组件初始化和专供都由容器负责,应用程序只是在获取相应组件后实现功能即可。
  • 相关阅读:
    Android 开发笔记___复选框__checkbox
    Android 开发笔记___FrameLayout
    Android 开发笔记___RelativeLayout
    Android 开发笔记___初级控件之实战__计算器
    Android 开发笔记___shape
    Android 开发笔记___DateUtil——Time
    改良版 导航栏自动跟随
    简洁 js排序算法
    简单使用rem方案适配移动设备
    导航栏监听页面滚动跟随 简单封装
  • 原文地址:https://www.cnblogs.com/qubo520/p/13633066.html
Copyright © 2011-2022 走看看