控制反转

很长一段时间里,我对控制反转和依赖注入这两个概念很模糊,闭上眼睛想一想,总有一种眩晕的感觉。但为了成为一名优秀的 Java 工程师,我花了一周的时间,彻底把它们搞清楚了。

紧耦合

在我们编码的过程中,通常都需要两个或者更多的类通过彼此的合作来实现业务逻辑,也就是说,某个对象需要获取与其合作对象的引用,如果这个获取的过程需要自己实现,代码的耦合度就会高,维护起来的成本就比较高。
我们来通过实战模拟一下。假如老王是少林寺的主持,他想让小二和尚去扫达摩院的地,代码可以这样实现。

控制反转

我们得替老王主持想个办法对不对?

不如把这个扫地的差事交给老王的师弟老方吧,老方负责去叫小二和尚还是小三和尚还是小四和尚去执行老王主持的命令。代码可以这样实现。

依赖注入

依赖注入(Dependency Injection,简称 DI)是实现控制反转的主要方式:在类 A 的实例创建过程中就创建了依赖的 B 对象,通过类型或名称来判断将不同的对象注入到不同的属性中。大概有 3 种具体的实现形式:

1)基于构造函数。实现特定参数的构造函数,在新建对象时传入所依赖类型的对象。

内部类

匿名类

在new对象的时候给出的类的定义形成了匿名类

匿名可以继承某类,也可以实现某接口

Swing的消息机制广泛使用匿名类

内部类

定义在别的类内部,函数内部的类

内部类能直接访问外部的全部资源

包裹任何私有的成员

外部是函数时,只能访问那个函数里final的变量

注入反转

由按钮公布一个守听者接口和一对注册\注销函数

你的代码实现那个接口,将守听者对象注册在按钮上

一旦按钮被按下,就会反过来调用你的守听者对象的某个函数

最新文章

  1. 引用js实现checkbox批量选中
  2. spring security 管理会话 多个用户不可以使用同一个账号登录系统
  3. Gatling->次时代性能测试利器
  4. 【转】SVN 查看历史信息
  5. the apply of backbone
  6. Qt之OpenSSL(有pro文件的路径格式)
  7. fir.im Weekly - 如何在 iOS 上构建 TensorFlow 应用
  8. 分享一个数据库工具DTOOLS
  9. Swing-JSlider用法-入门
  10. c# 判断当前版本是Debugger或Release
  11. Struts2源码解析2
  12. SpringBoot项目启用本地Tomcat
  13. Codeforces Round #404 (Div. 2) B. Anton and Classes 水题
  14. 强大的dfs(用处1——拓扑排序【xdoj1025】,用处二——求强联通分量【ccf高速公路】)当然dfs用处多着咧
  15. mybatis-config.xml文件详解
  16. get传输时,会将加号+ 转换为空格
  17. Hbase 一次表异常,有一张表 无法count scan 一直显示重连
  18. poj2002 Squares(hash+折半枚举)
  19. nginx list directory
  20. 使用squid架设自己的代理server

热门文章

  1. 【Java复健指南09】项目练习全解--房屋出租系统
  2. Windows Server 2019 安装 Oracle 19C RAC(VMWare虚拟机环境)
  3. PHP实现CURL发送请求
  4. nydusd 源码理解(一)
  5. [排序算法] 冒泡排序 (C++)
  6. kubernetes笔记-3-快速入门
  7. .NET性能优化-使用内存+磁盘混合缓存
  8. bugku 秋名山老司机
  9. SSH SCP 使用秘钥验证 登录
  10. webapi+vue跨域session丢失解决方法