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

大师们,用IOC注入最大的好处是什么?

发布网友 发布时间:2024-10-02 07:12

我来回答

2个回答

热心网友 时间:2024-12-05 17:33

IoC是什么?Inversion of Control,即反转控制,或许说为依赖注入更为合适。IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式。
Interface Driven Design接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执 行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了,如:
Class A{
AInterface a;
A(){}
aMethod(){
a = new AInterfaceImp();
}
}
ClassA与AInterfaceImp就是依赖关系,如果想使用AInterface的另外一个实现就需要更改代码了。当然我们可以建立一个Factory来根据条件生成想要的AInterface的具体实现,即:
InterfaceImplFactory{
AInterface create(Object condition){
if(condition = condA){
return new AInterfaceImpA();
}elseif(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、String中都是用“反射”做为最基本的技术手段。
在过去,反射编程方式相对于正常的对象生成方式要慢10几倍,这也许也是当时为什么反射技术没有普通应用开来的原因。但经SUN改良优化后,反射方式生成对象和通常对象生成方式,速度已经相差不大了(但依然有一倍以上的差距)。
IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。
IoC最大的缺点是什么?(1)生成一个对象的步骤变复杂了(其实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象 生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3) 缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。

热心网友 时间:2024-12-05 17:34

降低程序的耦合性!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
陌陌发语音出现转码失败怎么办 女孩2010年5月10号阴历3月27早晨9点55分出生的五行缺什么 钟姓男孩名字2023年5月10日出生的 凤眼果有什么营养?凤眼果的这些营养你都知道吗? 专升本成绩多少合格 山东专升本成绩多少合格 山东2022年专升本成绩什么时候出 2024专升本成绩公布时间及入口 2023年山东专升本各专业录取分数线 什么时候出专升本成绩 山东专升本综合素质测评成绩怎么算 有人知道最近很火的小说作者坐墙等红杏吗?他因为哪部作品出名的?好看吗... spring IOC容器操作Bean管理——完全注解方式 带你体验Spring6中11种IOC控制反转实现方式 22234CC/W33轴承22234CC/W33轴承用途 SKF 22217CC/W33轴承22217CC/W33轴承用途 轴承23230CC/W3323230CC/W33销售网络 22230CC/W33轴承22230CC/W33轴承用途 FAG 23220CC/W33轴承23220CC/W33销售网络 lol新区活动(LOL新区男爵领域开启介绍_lol新区活动(LOL新区男爵领域开启... lol男爵领域怎么进?lol男爵领域什么时候开启 LOL男爵领域2888金币如何领取 注册账号怎么没有2888金币 LOL男爵领域新区怎么进 男爵领域在哪里 专升本的难度和高考比怎么样?那个更难?? 相亲时怎样和女孩子聊天? nova5手机自带云相册吗? 苹果一体机怎么进bios? 苹果一体机怎么装windows系统 印度尼西亚拘留会传回中国吗 【在九大行星中,被称为最冷的行星是哪一颗? A.天王星 B.冥王星】 懂... 电动剃须刀哪个牌子最好用啊?? 我这是笔记本,不管下载了什么软件都打不开,没反应。求解答,谢谢 电脑死机,我的三星笔记本上网的时候点击视频看,突然死机,然后启动不了... akg701与hd600对比 真心求教,AKG K701的迷茫 u盘怎么设置权限设置密码-(u盘可以设置密码) 大连链家公积金缴存太少可以讨回吗? ...吗?效果怎么样?要不要忌口?会不会反弹。求真实回答 ...第一次开机安照提示输入了帐户名和密码,之后开机都要输入密码... 要达到什么条件才可以确定为是固定资产 鱼刺卡喉咙了!医生说找不到,可能是刺进肉里头了!就叫我吃点阿莫西林,过... 安步当车的故事是什么 波尔多的欲望天堂剧情介绍 波尔多的欲望天堂简介 波尔多欲望天堂简介 西蒙·比尔弗伊个人作品 谁有猫扑1000个包子表情包,全部的。 下列说法错误的是无论演奏者还是欣赏者下列说法错误的是 23岁 可以配置保险吗? 谷歌浏览器内嵌框架自动启动谷歌浏览器内嵌框架 puppeteer生态一览