问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

什么是IOC,什么时候用IOC ?

发布网友 发布时间:2022-04-21 01:07

我来回答

3个回答

热心网友 时间:2023-10-08 17:40

控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征,并非面向对象编程的专用术语
IoC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GoF中。
Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了,如:

1234567891011

classA{ AInterface a; A(){} AMethod()//一个方法 { a = new AInterfaceImp(); }}

Class A与AInterfaceImp就是依赖关系,如果想使用AInterface的另外一个实现就需要更改代码了。当然我们可以建立一个Factory来根据条件生成想要的AInterface的具体实现,即:

123456789101112131415161718

InterfaceImplFactory{ AInterface create(Object condition) { if(condition == condA) { return new AInterfaceImpA(); } else if(condition == condB) { return new AInterfaceImpB(); } else { return new AInterfaceImp(); } }}

表面上是在一定程度上缓解了以上问题,但实质上这种代码耦合并没有改变。通过IoC模式可以彻底解决这种耦合,它把耦合从代码中移出去,放到统一的XML 文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中,这可能就是“依赖注入”说法的来源了。
IoC模式,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
当前比较知名的IoC容器有:Pico Container、Avalon 、Spring、JBoss、HiveMind、EJB等。
在上面的几个IoC容器中,轻量级的有Pico Container、Avalon、Spring、HiveMind等,超重量级的有EJB,而半轻半重的有容器有JBoss,Jdon等。
可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java 的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
IoC中最基本的Java技术就是“反射”编程。反射又是一个生涩的名词,通俗的说反射就是根据给出的类名(字符串)来生成对象。这种编程方式可以让对象在生成时才决定要生成哪一种对象。反射的应用是很广泛的,像Hibernate、Spring中都是用“反射”做为最基本的技术手段。
在过去,反射编程方式相对于正常的对象生成方式要慢10几倍,这也许也是当时为什么反射技术没有普遍应用开来的原因。但经SUN改良优化后,反射方式生成对象和通常对象生成方式,速度已经相差不大了(但依然有一倍以上的差距)。

热心网友 时间:2023-10-08 17:40

ioc spring控制反转...首先为什么要用ioc,以前做项目老是创建对象,而且多个对象之间耦合对很高,维护的时候要修改某个对象,却级联的要修改其他对象.. ioc 把对象的生命周期交给spring管理,使用配置文件映射的方式生成对象..利于维护,减少耦合。 缺点:由于是映射生成对象,速度比一般要慢大概2倍. 所以使不使用是应项目而异...

热心网友 时间:2023-10-08 17:41

控制反转,意思就是将实体类的对象生成方式在配置文件中完成
在spring框架中,它贯穿与整个系统,对象的生成都在配置文件中
呵呵
时刻都要用到
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... Spring框架如何实现ioc的?能详细解释一下内部机制么 什么是IoC以及理解为什么要使用Ioc IOC容器到底是什么解决方法 spring的ioc容器可以为普通的类创建单例,它是怎么做到的呢 spring的ioc容器实现原理,为什么可以通过byname和bytype找到bean spring ioc容器指的是什么 IOC容器是什么? spring ioc实现原理 java编程,spring里ioc和aop用什么原理实现的 spring ioc是怎么实现的 IOC容器是什么 一嗨租车芝麻信用多少可以免押金 qq身份证 QQ可以更换身份证 qq身份证设置有什么用 QQ身份证有什么用处 QQ身份证是干啥用的 qq身份证格式怎么写? 小米6不能快速充电了,是什么原因? 小米4s为什么网速慢没有别的手机上网快 什么是IOC,IOC的优缺点及IOC的应用 IOC究竟有什么存在意义 需要设计一个类似IOC容器类 大型.net网站使用什么ioc容器 win7 计算机 分组依据 spring的ioc和aop都是什么?? spring的ioc注入方式有几种 如何给 TP3.1 用上 IoC 容器 芝麻信用 一嗨租车,预授权了双免,如果违法扣分,会影响到芝麻信用分吗? 生肖属鼠的年份有哪些? 十二生肖中,鼠为什么排在第一呢,有什么依据? 子鼠是什么生肖 十二生肖中鼠的性格特点是怎么样的? 十二生肖鼠的来历 十二生肖鼠应该排列第几位? 十二生肖鼠为什么排第一? 十二生肖鼠的象征意义是什么? 十二生肖子鼠是什么意思? 十二生肖中为什么没有猫有老鼠的? 十二生肖之鼠