面试的时候,偶尔会遇到让谈谈IOC容器的问题,在这里做一个简要的整理。这个问题从毕业到现在时不时的出现,答案也一次一次的被刷新。因为个人理解有限,仅从三个阶段去阐述,同时欢迎各位拍砖。
阶段一:概念的阐述
阶段二:从实现的角度去阐述
阶段三:举一反三的使用场景
阶段一:概念的阐述
IOC、DI是什么?IOC即控制反转,DI即依赖注入,表面上两个是不沾边的概念,其实是解决“对象与对象之间强耦合问题”的方式和方法。那么先来说一下到底IOC是一种什么样的方式,举个不恰当的栗子,A想去买一套二手房,B刚好手里有一套二手房,但是A想知道B有二手房,必须看小广告,然后打电话问(查找对象),一开始可能先给C打,可是C只想把他的二手房租出去,并不想卖,终于有一天找到了B,然后A说先把B这套房订下来(强依赖),本来以为皆大欢喜了。可是准备签合同的时候B又找到另外一个出高价的人,B告诉A说对不起不卖了,A只能哭了。这个时候扮演IOC的角色出现了,那就是房产中介D,当A想买房的时候,告诉D我要买个几室几厅的二手房;B想卖房,然后也找D登记了。D手里有很多房源和客源(IOC 容器)直接告诉A、B成交,这问题就解决了。我们回顾一下这种方式,就会发现本来由A正向控制B,这样B稍微一变就杯具了
,当D出现后,由D来反向控制A,而 D来拿到B给A的过程就是DI。理解了这一点,我们换成官方的话就是:“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”,”控制反转“把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象的思想,解决了对象与对象之间强耦合的问题
阶段二:从实现的角度去阐述
首先,在没有IOC的情况下,我们是这样强依赖的
解决容器对组件的“侵入式”管理的两种方案--主动查找和控制反转
接着,简单通过反射加配置的方式
初步实现
最后,我们使用跟spring相似的实现方式(只实现了spring三种注入方式中的set注入)
最终版
阶段三:举一反三的使用场景
除了spring 容器对bean的管理之外,我能想到的IOC场景
1.对消息的处理封装成消息中心,消息的注册和消费都在这个消费中心去做,由消息中心通过接口调用方式,注入到消费方,这样可以达到可靠的消息处理,包括失败重试
2.分布式rpc服务的注册中心
引用
http://blog.csdn.net/jiuqiyuliang/article/details/44114731
分享到:
相关推荐
Spring IoC容器实现的结构分析
java IOC容器实现.jpg
自己实现的简易的模拟Spring的IoC容器,实现注解自动装配
之前一直想仔细研究研究spring容器技术的原理,参考别人的实现发现比想象的要简单。
NULL 博文链接:https://ziyoujiedao.iteye.com/blog/262360
一个简单的IOC容器的java实现,一个简单的IOC容器的java实现
详细描述了spring IOC的工作原理和实现细节
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
自己动手实现IOC容器的demo,帮助理解和学习spring IOC容器的基本原理和实现,适合学过或者用过spring的java玩家
spring ioc容器部署实现
wire.js 是一个轻量级的 JavaScript IoC 容器实现。 标签:wirejs
自己用纯java(未使用任何框架),实现的IOC容器,对理解springIOC的原理有一定的帮助,对spring初学者有一定的帮助
手动实现一个ioc容器.zip
参考别人博文,边看边学(基本照着敲)的一个简单IOC容器demo,通过注解的方式实现注入。就0积分吧哈哈哈
实现的IOC容器,理解IOC的内部原理,通过该代码,可以更加容易理解IOC的构造
ioc的注解轻量集框架。你只需要声音接口,并在接口方法上添加注解,然后new该接口,空实现就好。再使用工厂方法,创建代理接口对象即可。
主要介绍了基于IOC容器实现管理mybatis过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
3. 如果一切正常,你会看到使用Java集合、XML API,以及反射技术模拟Spring的get注入和自定义的IoC容器实现的例子--get注入了Hello类和一个MyFrame类,并且实例化之后可以运行! 4. 看一下testDemoSpringDI()方法,...
Spring实现原理、IoC容器的优点及在Eclipse 中创建Spring的 Web应用
实现依赖注入:1、构造函数注入。2、属性注入。3、接口注入。4、IOC容器注入。5、Unity注入,根据配置文件