游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

控制反转依赖反转依赖注入有什么区别和联系

  关于依赖注入如何理解,控制反转和依赖注入这两个概念有什么区别。,spring框架中的IOC跟这些概念有什么区别控制反转
  控制反转(Inversionofcontrol)也就是IOC,spring经常会提到这个概念,可以先通过一个例子看下publicclassUserServiceTest{publicstaticbooleandoTest(){。。。returntrue;}publicstaticvoidmain(String〔〕args){if(doTest()){System。out。println(success);}else{System。out。println(fail);}}}
  上面的代码中,所有流程由程序员控制,其实可以进行一定的抽象,利用框架来实现同样的功能,如下代码publicabstractclassTestCase{publicvoidrun(){if(doTest()){System。out。println(success);}else{System。out。println(fail);}}publicabstractBooleandoTest();}publicclassTestApplication{privatestaticfinalListTestCasetestCaseListnewArrayList();publicstaticvoiddoRegister(TestCasetestCase){testCaseList。add(testCase);}publicstaticvoidmain(String〔〕args){for(TestCasetestCase:testCaseList){testCase。run();}}}
  使用这个简化版的工程后,只需要在框架预留的扩展点(TestCase中的doTest抽象函数),填充具体代码就可以实现之前的功能了,不需要写负责main函数了,具体如下publicclassUserServiceTestextendsTestCase{OverridepublicBooleandoTest(){returntrue;}publicUserServiceTest(){注册操作还可以通过配置的方式来实现,不需要程序员显示调用register()TestApplication。doRegister(newUserServiceTest());}}
  以上是控制反转的例子,框架提供了一个可扩展的代码骨架,用来组装对象、管理执行流程。开发者只需要在预留的扩展点上添加跟自己业务相关的代码,就可以利用框架来驱动整个程序流程的执行。
  这里的控制指的是对程序执行流程的控制,而反转指的是在没有使用框架之前,开发者自己控制整个程序的执行流程,使用框架之后整个利用由框架来控制。控制反转并不是一种具体的实现技巧,而是一个比较笼统的思想,一般用来指导框架的顶层设计依赖注入
  依赖注入跟控制反转恰恰相反,它是一种具体的编码技巧。用一句话来概括就是:不通过new()的方式在类内部创建依赖对象,而是将依赖的类对象在外部创建好通过构造方法、函数参数等方式传递给类使用非依赖注入方式publicclassNotification{privateMessageSendermessageSender;publicNotification(){this。messageSendernewMessageSender();}publicvoidsendMessage(){messageSender。sendMessage();}}publicclassMessageSender{publicvoidsendMessage(){。。。。}}依赖注入方式publicclassNotification{privateMessageSendermessageSender;publicNotification(MessageSendermessageSender){this。messageSendermessageSender;}publicvoidsendMessage(){this。messageSender。sendMessage();}}
  通过依赖注入的方式将依赖的类对象传递进来,提高了代码的扩展性,可以灵活的替换依赖类,这样也比较符合开闭原则。我们还可以把MessageSender定义成接口,基于接口而非实现类编程,改造如下publicclassNotification{privateMessageSendermessageSender;publicNotification(MessageSendermessageSender){this。messageSendermessageSender;}publicvoidsendMessage(){this。messageSender。sendMessage();}}publicinterfaceMessageSender{voidsendMessage();}publicclassSmsSenderimplementsMessageSender{OverridepublicvoidsendMessage(){}}
  上面的例子就是依赖注入,其实在日常的开发中非常常用依赖注入框架
  我们继续看下什么是依赖注入框架,继续使用刚才的例子来说明,在采用依赖注入实现的Notification中,不用在类内部通过new来创建MessageSender对象,但是创建对象、组装对象的工作仅仅被移动到了更上层的代码而已,具体如下publicclassDemo{publicstaticvoidmain(String〔〕args){MessageSendersmsSendernewSmsSender();NotificationnotificationnewNotification(smsSender);notification。sendMessage();}}
  在实际的软件开发中,项目可能涉及到上百个类,类对象的创建和依赖会变得非常麻烦,所以像对象创建和依赖注入的工作,本身和业务无关,完全可以抽象成框架自动完成
  这个框架就是依赖注入框架。我们只需要通过依赖注入框架提供的扩展点,简单配置一下所有需要创建的类对象、类与类之间的依赖关系,就可以实现由框架来自动创建对象、管理对象的生命周期、依赖注入等原本需要程序员来做的事情。
  实际上,现成的依赖注入框架有很多,最典型的就是Spring依赖反转原则
  前面讲了控制反转、依赖注入、依赖注入框架,最后讲下依赖反转原则。依赖反转原则的英文翻译是DependencyInversionPrinciple,缩写为DIP。中文翻译有时候也叫依赖倒置原则。
  主要的概念是:高层模块(highlevelmodules)不要依赖低层模块(lowlevel)。高层模块和低层模块应该通过抽象(abstractions)来互相依赖。除此之外,抽象(abstractions)不要依赖具体实现细节(details),具体实现细节(details)依赖抽象(abstractions)。所谓高层模块和低层模块的划分,简单来说就是,在调用链上,调用者属于高层,被调用者属于低层。在平时的业务代码开发中,高层模块依赖底层模块是没有任何问题的。实际上,这条原则主要还是用来指导框架层面的设计,跟前面讲到的控制反转类似。我们拿Tomcat这个Servlet容器作为例子来解释一下。
  Tomcat是运行JavaWeb应用程序的容器。我们编写的Web应用程序代码只需要部署在Tomcat容器下,便可以被Tomcat容器调用执行。按照之前的划分原则,Tomcat就是高层模块,我们编写的Web应用程序代码就是低层模块。Tomcat和应用程序代码之间并没有直接的依赖关系,两者都依赖同一个抽象,也就是Sevlet规范。Servlet规范不依赖具体的Tomcat容器和应用程序的实现细节,而Tomcat容器和应用程序依赖Servlet规范。
  不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之

苏教版小学语文五年级黄山奇松说课稿基本信息课题苏教版小学语文五年级《黄山奇松》作者及工作单位三亚市第七小学黄菊教材分析《黄山奇松》是苏教版小学语文第九册中的一篇课文,本单元是一组描绘祖国大好河山的美文。其中《黄……抚州五菱之光最高优惠0。05万元欢迎试乘试驾本周五菱之光最新报价:五菱汽车抚州国鼎销售中心店11。0111。01限时促销,最高优惠0。05万元,如此优惠的降幅,大家可千万不要错过,店铺地址:抚州市文昌大道与迎宾大道交叉口……盘点PSV上期待移植NS的十款佳作,哪一款是你的最爱?在switch正式发售前,掌机市场由于受到智能手机的冲击江河日下,老任自己的3DS由于宝可梦及塞尔达、马里奥等独占IP以及价格低廉的优势还有着不错的市场,但反观WiiU软硬件双……家居安全教育教案2篇温暖的家庭是孩子成长的摇篮,下面是小编为大家收集的关于家居安全教育教案,希望能够帮到大家!家居安全教育教案【1】一、谈话引入同学们生活在幸福、温暖的家庭里,受到父母……关于藏戏的教学反思六年级下册第二组都是介绍不同地区、不同民族自己独特的民风民俗。我感觉学生在学这一单元内容时,应该非常感兴趣,结果也正如我所料。《藏戏》一,感受颇深。现将自己对本节的反思随手写下……对客观世界的主观表达走进意象艺术教学设计对客观世界的主观表达走进意象艺术教学设计海南省海口实验中学邢述评撰写〔对客观世界的主观表达走进意象艺术〕教学设计教学内容人美版普通高中课程标准实验教科书《美术鉴赏》第4课一、课……人教版长城砖课文教案示例教学目标:1、认识8个生字,有感情的朗读课文。2、阅读课文,能抓住课文的主要内容。3、联系生活经验,感悟到不能妄自菲薄,要自尊自信的道理。一、引发兴趣。……义教语文七下教学用书第三单元单元说明这是一个名人单元。前三篇写的是邓稼先、闻一多、贝多芬,第四篇写的是群像,有福楼拜、屠格涅夫、都德和左拉。文言文《孙权劝学》,写的是我国古代名人。这些文章人文内涵丰富,都各有侧重……幼儿园小班排序的教案活动设计背景在日常活动中,我发现有的幼儿已会按一定规律排序,但大部分幼儿还不知道按一定规律排序,为此,我根据本班幼儿的实际情况,设计了此活动。通过这个活动,让幼儿掌握排序……月亮的心愿的优秀教案教材分析:《月亮的心愿》是小学语文一年级下册的一篇课文。本文以月亮的内心变化为线索,借助小女孩珍珍为了照顾生病的妈妈,放弃郊游的事,赞扬了关心父母、体贴父母准备的美好品质……奇妙的商店的大班综合活动说课稿一、说活动准备依据幼儿园活动的特点,为了给幼儿提供健康、丰富的活动环境,满足他们多方面发展的需要,使他们在活动中获得有益于身心发展的经验,我制定出以下的活动准备:1……论语是非辨析,为政之十九【原文】19哀公闻曰:何为则民服?孔子对曰:举直错诸枉,则民服;举枉错诸直,则民不服。【译文】鲁哀公问:怎样才能使民服呢?孔子说:让公正压制着错误,民就会服;让错误压制着……
终于面世华为Mate40系列摄影升级,拍视频更轻松就在10月22号,大家期待许久的华为Mate40系列手机发布了,除了新一代的5nm制程的麒麟9000芯片,全新升级的66W的快充,以及功能更强大的EMUI11系统,都极具特色,……款款颜值高性能强,网友120Hz5000毫安,爱了红米K30每个人都熟悉红米K30。正面采用双孔筛网设计。正面配备了一块6。67英寸的LCD屏幕,支持120Hz刷新率。这种配置可以显示出良知。120Hz千元机在当时还是很……合资小型SUV,颜值配置俱佳,年轻人首辆车的理想之选不能不承认,现在购车人群越来越呈现年轻化,刚刚参加工作,甚至大学还没有毕业,就已经拥有了人生的第一辆车。这些年轻人在选择车辆时,已经不像老一代消费者把空间、动力作为首选了,取而……量子计算迎来吸金热!加拿大创企Xanadu再获1亿美元融资智东西(公众号:zhidxcom)编译剑腾编辑云鹏智东西5月26日消息,本周二加拿大量子科技公司Xanadu(XanaduQuantumTechnologie……第五次赞扬!央妈再次肯定小米,智能工厂成我国自主研发缩影就在今天5月10日的《今日中国》特别节目上,小米智能工厂再次受到央妈表扬!截止到目前小米前前后后被央妈表扬了五次,而这次的小米智能工厂是央妈的二度表扬,体现了我国自主研发创新的……(科技知识)浅析计算机知识前沿科技的发展可谓是日新月异,也是各类考试中的宠儿,尤其是计算机知识,更是频繁穿梭于各大考试,今天我们就来聊聊计算机知识。一、计算机相关的基本概念计算机是具备数据存……智能解析吊打各种付费V!P让你爽翻天今天给大家推荐的这款软件是一个拥有短视频去水印、影视解析、音乐解析三大功能的小工具,这三大功能全都是可以免费使用的。简单说明第一次打开软件时会提示你登录,但是不登录直接按……NS更新支持蓝牙耳机,从此不用发射器NS终于能用蓝牙耳机了NS系统固件更新13。0。0版本。添加对蓝牙音频输出设备的支持。(不支持蓝牙设备的麦克风输入)在主机选项中新增更新底座,只有NSOLED……锚定全球最强目标横店影视文化产业集聚区政策分享会在京举行5月27日,横店影视文化产业集聚区在北京举办招商推介暨政策分享会,掌阅集团、世纪华纳、腾飞影业等60余家企业参加。相关负责人介绍了横店影视文化产业的优势和集聚区的扶持政策……来说说windows11是否值得升级首先我先发表我的主观的观点。以我的观点回答问题,答案是不建议,我又用系统盘降级回去了。1、建议升级系统尽量不要在发布的1年内升级,主要是各种应用的驱动还未发布,比如……iPhone13被卖爆,友商年轻人不讲武德距离iPhone13发布已经一个多月了,但是iPhone13的热度依然不减,第一批官网预定的机器才陆续到货。接下来的双十一,不出意外各大电商平台又要进行一大波预热了。苹果有什么……智能网联,救市良药还是慢性毒药?车企花十分的精力研发车载功能,而用户只体验了三分钟,就掏出了口袋里的手机。文Toretto没有人会质疑汽车智能网联的未来,但没有多少车企已经找到通往未来的路。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网