分离关注( Separation of Concerns : SOC)是Ioc模式和AOP产生最原始动力,通过功能分解可得到关注点,这些关注可以是 组件Components, 方面Aspects或服务Services。

从GOF设计模式中,我们已经习惯一种思维编程方式:Interface Driven Design 接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:

AInterface a = new AInterfaceImp();

AInterfaceImp是接口AInterface的一个子类,Ioc模式可以延缓接口的实现,根据需要实现,有个比喻:接口如同空的模型套,在必要时,需要向模型套注射石膏,这样才能成为一个模型实体,因此,我们将人为控制接口的实现成为“注射”。

Ioc英文为 Inversion of Control,即反转模式,这里有著名的好莱坞理论:你呆着别动,到时我会找你。

其实Ioc模式也是解决调用者和被调用者之间的一种关系,上述AInterface实现语句表明当前是在调用被调用者AInterfaceImp,由于被调用者名称写入了调用者的代码中,这产生了一个接口实现的原罪:彼此联系,调用者和被调用者有紧密联系,在UML中是用依赖 Dependency 表示。

但是这种依赖在分离关注的思维下是不可忍耐的,必须切割,实现调用者和被调用者解耦,新的Ioc模式 Dependency Injection 模式由此产生了, Dependency Injection模式是依赖注射的意思,也就是将依赖先剥离,然后在适当时候再注射进入。

一、Ioc模式(Dependency Injection模式)有三种:

第一种类型 从JNDI或ServiceManager等获得被调用者,这里类似ServiceLocator模式。 1.EJB/j2ee 2. Avalon(Apache的一个复杂使用不多的项目)

第二种类型 使用JavaBeans的setter方法 1. Spring Framework,2.WebWork/XWork

第三种类型 在构造方法中实现依赖 1. PicoContainer,2. HiveMind

有过EJB开发经验的人都知道,每个EJB的调用都需要通过JNDI寻找到工厂性质的Home接口,在我的教程EJB是什么章节中,我也是从依赖和工厂模式角度来阐述EJB的使用。

在通常传统情况下,为了实现调用者和被调用者解耦,分离,一般是通过工厂模式实现的,下面将通过比较工厂模式和Ioc模式不同,加深理解Ioc模式。

二、工厂模式和Ioc

假设有两个类B 和 C:B作为调用者,C是被调用者,在B代码中存在对C的调用:

java 代码

java控制反转_控制反转(IOC)模式相关推荐

  1. java反射机制(三)---java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control)可翻译为"控制反转",但大多数人都习惯将它称为"依赖注入".在Spring中,通过IOC可以将实现类.参数信息等配 ...

  2. java 反转 控制 注入_控制反转和依赖注入

    全2册git版本控制管理(第2版)+ 99.8元 包邮 (需用券) 去购买 > 控制反转(Inversion of Control)即IoC,是一种模式,Spring的核心概念. 依赖注入(De ...

  3. java相机开发_控制相机  |  Android 开发者  |  Android Developers

    在本课程中,我们将讨论如何使用框架 API 直接控制相机硬件. 与从已有相机应用请求照片或视频相比,直接控制设备相机所需要的代码要多得多.不过,如果您要开发专门的相机应用或者与您的应用界面完全集成的应 ...

  4. java设置并行度_控制Java并行流的并行度

    java设置并行度 在掌握了这些新功能之后,随着Java 9的最新发布,我们有了许多新功能可以用来改进我们的解决方案. Java 9的发布也是修改我们是否掌握Java 8功能的好时机. 在这篇文章中, ...

  5. java 控制转移指令_控制转移类指令

    条件转移指令Jcc根据指定的条件确定程序是否发生转移.如果满足条件则程序转移到目标地址去执行程序:不满足条件,则程序将顺序执行下一条指令. 其通用格式为: Jcc LABEL         ;条件满 ...

  6. java 复印件效果_简历复印—原型模式

    <大话设计模式>书中描述原型(Prototype)模式: 原型模式(Prototype):用用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式(Prototype ...

  7. python控制视频_控制Python面向对象的访问

    回顾 在Python进阶记录之基础篇(十五)中,我们介绍了面向对象的基本概念以及Python中类和对象的基础知识,需要重点掌握类的创建和对象的使用.今天我们继续讲一下Python中面向对象的相关知识点 ...

  8. python如何控制浏览器_控制使用Python浏览器?

    Is it possible to control a web browser like Firefox using Python? I would want to do things like la ...

  9. java中控制反转_Java如何利用IOC控制反转的三种设计模式详解

    这篇文章主要为大家详细介绍了Java使用IOC控制反转的三种设计模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 对于许多开发人员来说,控制反演(IoC)都是一个模糊的概念,因为他们在现实世界中 ...

  10. ioc控制反转_深入理解依赖注入(DI)和控制反转(IOC)

    转载本文务必须注明出处.微信号(Yemeir_com).以及添加原文链接. 为什么要使用依赖注入 使用依赖注入(DI)可以使控制者与抽象实现者松耦合,便于单元测试.通过控制反转(IOC)的设计原理来减 ...

最新文章

  1. mysql schedule event,MySQL 定时器event
  2. BugKuCTF 加密 滴答~滴
  3. Record of redevelopment of website
  4. 华为mate50鸿蒙,华为Mate50Pro首次曝光,5000mAh+鸿蒙OS+120Hz,太强
  5. 自兴人工智能---认识python语言的基础数据类型和操作
  6. 软件测试方法和技术_软件测试学习怎么入门?附真实学习方法
  7. java如何算log_用java代码计算Log(a)b
  8. 机器学习(6)——朴素贝叶斯(文本分类)
  9. 伪分布式Hbase安装和配置
  10. (文末福利)2021黑马Python6.5之Python环境搭建与输入输出
  11. 如何使用《口袋操作系统 Ceedo 2.2.1.23 汉化破解版》
  12. 计算机相关课程考核,计算机专业编程实践类课程考核方法
  13. java实现word转pdf(功能转载)(亲测验证)
  14. 全球与中国相机模组胶黏剂市场运营现状及投资可行性评估报告2022-2028年
  15. _()---由此知度娘和google的冷暖
  16. Python反反爬系列(一)----K近邻算法与CSS动态字体加密
  17. echarts legend不显示
  18. C语言的fclose()函数
  19. 提升百度快照更新频率的方法
  20. autoware实车实战之一:如何快速适配环境、让自己的小车跑起来

热门文章

  1. 网站静态化与mysql优化
  2. Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法...
  3. c# 委托和委托事件
  4. powershell玩转ExcelCSV(一)
  5. R语言机器学习:xgboost的使用及其模型解释
  6. 使用Rotativa在ASP.NET Core MVC中创建PDF
  7. 【工具】Sublime Text 自动保存功能
  8. 开始使用Pyhton
  9. Spark-Mllib(二)基本统计
  10. 手把手教你如何加入到github的开源世界!