------------------------------------------------------------------------

理解IoC/DI

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

  谁控制谁?  --> IoC/DI容器控制应用程序

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

  为何叫反转(对应于正向)? --> 因为现在应用程序不能主动去获取外部资源了,而是被动等待IoC/DI容器给它注入它所需要的资源,所以称之为反转.

  哪些方面反转了? --> 1.创建对象 2.程序获取资源的方式反了

  为何需要反转? --> 1.引入IoC/DI容器过后,体系更为松散,而且管理更有序; 2.类之间真正实现了松散耦合

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容器开发需要改变思路

  a. 应用程序不主动创建对象,但是要描述创建它们的方式

  b. 在应用程序代码中不直接进行服务的装配,但是要描述哪一个组件需要哪一项服务,由容器负责将这些装配在一起。也就是说:所有的组件都是被动的,组件初始化和专供都是由容器负责,应用程序只是在获取相应的组件后,实现应用的功能即可。

最新文章

  1. CSS-垂直|水平居中问题的解决方法总结
  2. delphi 弹出选择目录窗口
  3. HQL查询——select子句
  4. Android Studio安装插件GsonFormat
  5. Day12~13(2016/2/1~2/2)
  6. Xamarin.Forms——WebView技术研究
  7. [译] TypeScript入门指南(JavaScript的超集)
  8. ios引导页 设定以及 图片尺寸
  9. 不使用border-radius,实现一个可复用的高度和宽度都自适应的圆角矩形
  10. StringBuffer和StringBuilder使用方法比較
  11. linux驱动: 如何向模块传递参数, module_param和module_param_array
  12. windows下使用openssl的一种方法
  13. ssh远程登录命令简单实例
  14. asp.net core 排序过滤分页组件:sieve(2)表达式树的复习
  15. C++ 提取网页内容系列之二
  16. Springboot学习笔记(五)-条件化注入
  17. Problem A 还会用继承吗?
  18. JVM异常之:堆溢出OutofMemoryError
  19. POJ 3268 Silver Cow Party (最短路径)
  20. 【Ray Tracing in One Weekend 超详解】 光线追踪1-6

热门文章

  1. sharepoint 2007 log track
  2. phonegap3.0+HTMLl5 开发 ipad app 总结
  3. (转)最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
  4. 【OCP 12c】最新CUUG OCP-071考试题库(62题)
  5. “全栈2019”Java第九十一章:内部类具有多态特性吗?
  6. MySql环境变量配置
  7. 40.oracle事务
  8. 4. C++11非受限联合体
  9. 1. C++11保证稳定性与兼容性
  10. Git、Github、码云 笔记汇总