ioc 订阅
国际奥林匹克委员会,简称为国际奥委会,是一个国际性的、非政府的、非赢利的组织。是奥林匹克运动的领导机构,它于1981年9月17日得到瑞士联邦议会的承认,确认其为无限期存在的具有法人资格的国际机构。总部位于瑞士洛桑。由法国人皮埃尔·德·顾拜旦建立,首任主席是泽麦特里乌斯·维凯拉斯。据2017年01月16日《人民日报》(海外版)第06版介绍,国际奥委会有100个委员和32个荣誉委员。 [1]  1894年6月23日,国际奥委会在巴黎召开的国际体育代表大会上成立,发起人是法国的教育家皮埃尔·德·顾拜旦男爵。成立之初总部设在巴黎,1914年第一次世界大战爆发,为避战火,1915年4月10日迁入有“国际文化城”之称的瑞士洛桑。国际奥委会根据现代奥林匹克运动创始人顾拜旦的理想,恢复奥林匹克运动的目的,在于增强各国运动员之间的友谊与团结,促进世界和平以及各国人民之间的相互了解,发展世界体育运动。《奥林匹克宪章》明文规定,国际奥委会的宗旨是:鼓励组织和发展体育运动和组织竞赛;在奥林匹克理想指导下,鼓舞和领导体育运动,从而促进和加强各国运动员之间的友谊。国际奥委会组织举办奥林匹克运动会、青年奥林匹克运动会、冬季奥林匹克运动会、残疾人奥林匹克运动会。它组织的首届夏季奥运会于1896年于希腊雅典举行,首届冬奥会于1924年在法国霞慕尼举行。在2018世界品牌500强排行榜中,国际奥林匹克委员会排名第125位。 [2] 展开全文
国际奥林匹克委员会,简称为国际奥委会,是一个国际性的、非政府的、非赢利的组织。是奥林匹克运动的领导机构,它于1981年9月17日得到瑞士联邦议会的承认,确认其为无限期存在的具有法人资格的国际机构。总部位于瑞士洛桑。由法国人皮埃尔·德·顾拜旦建立,首任主席是泽麦特里乌斯·维凯拉斯。据2017年01月16日《人民日报》(海外版)第06版介绍,国际奥委会有100个委员和32个荣誉委员。 [1]  1894年6月23日,国际奥委会在巴黎召开的国际体育代表大会上成立,发起人是法国的教育家皮埃尔·德·顾拜旦男爵。成立之初总部设在巴黎,1914年第一次世界大战爆发,为避战火,1915年4月10日迁入有“国际文化城”之称的瑞士洛桑。国际奥委会根据现代奥林匹克运动创始人顾拜旦的理想,恢复奥林匹克运动的目的,在于增强各国运动员之间的友谊与团结,促进世界和平以及各国人民之间的相互了解,发展世界体育运动。《奥林匹克宪章》明文规定,国际奥委会的宗旨是:鼓励组织和发展体育运动和组织竞赛;在奥林匹克理想指导下,鼓舞和领导体育运动,从而促进和加强各国运动员之间的友谊。国际奥委会组织举办奥林匹克运动会、青年奥林匹克运动会、冬季奥林匹克运动会、残疾人奥林匹克运动会。它组织的首届夏季奥运会于1896年于希腊雅典举行,首届冬奥会于1924年在法国霞慕尼举行。在2018世界品牌500强排行榜中,国际奥林匹克委员会排名第125位。 [2]
信息
创建者
皮埃尔·德·顾拜旦(法国人)
外文名
International Olympic Committee(英),Comité international olympique (法)
简    称
国际奥委会(IOC)
成    员
206国家和地区
总    部
瑞士洛桑(Lausanne)
中文名
国际奥林匹克委员会
官    网
http://www.olympic.org/
成立时间
1894年6月23日
现任主席
托马斯·巴赫
官方语言
英语、法语
国际奥林匹克委员会发展历程
1894年6月16日-24日,根据世界著名的国际体育活动家,法国人皮埃尔·德·顾拜旦的建议,来自法国、英国、希腊、瑞典、意大利、俄国(俄罗斯)、比利时、捷克斯洛伐克、新西兰、美国、阿根廷、匈牙利12个国家的49个体育组织的代表,在巴黎索邦神学院举行国际体育运动代表大会。在开幕式上,法国著名古希腊文化专家切奥多尔·莱拉赫发表演说,巴黎国家歌剧院合唱团为大会演唱了阿波罗颂歌,唤起了与会者对古奥运会的神往。 [3]  会议期间,又先后有21个国家致函,向大会表示支持和祝贺。这次会议通过了成立国际奥委会(成立时间1894年6月23日,成立时的名称是“奥林匹克运动会国际委员会”)的决议,并从79名正式代表中选出15人任第1届国际奥委会委员。大会还决定由奥运会举办国的国际奥委会委员担任国际奥委会主席。由于首届奥运会定于1896年在希腊首都雅典举行,因此希腊委员泽麦特里乌斯·维凯拉斯当选国际奥委会第一任主席,顾拜旦为秘书长。会议规定法语(现为英、法两种语言)为国际奥委会法定语言。大会还决定沿袭古奥运会传统,每四年举行一次运动会,还规定奥运会的比赛项目为田径、水上运动(包括帆船、划船、游泳)、击剑、摔跤、拳击、马术、射击、体操、球类运动等。第一届奥运会原定于1900年于巴黎举行,后来考虑希腊为古代奥运会发源地,在希腊举行比在巴黎意义更重大些,顾拜旦尊重了大家的意见。大会决定把第一届会期改在1896年,鉴于古代奥运会遗址奥林匹亚已成了一片废墟,会址改设在希腊首都雅典。奥运会最早始于古希腊的奥林匹亚由古代希腊人民为祭神和崇拜英雄而举行的一些竞赛活动逐渐发展形成的。举行的地点就在古希腊雅典城西南方向360公里外的奥林匹亚村举行,因此而得名。第一届古代奥运会于公元前776年举行,共举行过293次。后来罗马帝国的入侵古希腊后,由于罗马皇帝狄奥多西信奉基督教,禁止一切关于异教的活动,因此运动会在公元393年被罗马皇帝狄奥多西废除。 [1]  1889年,法国的顾拜旦男爵提出恢复奥林匹克运动的建议。第一届近代奥运会于1896年在希腊举行。以后每四年举行一次。即使其间因故不能举行,届数仍然依次照算(第6、12、13届未举行。第6届由于第一次世界大战的爆发未能举行,第12,13届则因为第二次世界大战的爆发未能举行)。至2016年,已经举行过31次奥运会,最近的一次是在巴西的里约热内卢举行的奥运会。1897年一家法文报纸首次称之为“国际奥林匹克委员会”,1901年正式改用现名。1914年第一次世界大战爆发,为避免战火洗劫,1915年4月10日总部从巴黎迁到瑞士洛桑。早在1922年,中国奥委会就得到了国际奥委会的承认。 [4]  中国曾派运动员参加了1932年、1936年和1948年的三次奥运会。新中国首次派队参加了1952年在赫尔辛基的第15届奥运会。但不久,当时的时任国际奥委会主席布伦戴奇把台湾列入了国际奥委会所承认的各国奥委会名单之中,企图制造“两个中国”。中国多次抗议交涉无效,于1958年声明中断与国际奥委会的关系。从1946年起,国际奥委会执委会分别与冬、夏季国际单项体育联合会之间不定期举行联席会议;从1952年起,国际奥委会执委会与国家奥委会之间也不定期举行联席会议。1975年,中国奥委会要求国际奥委会恢复在奥林匹克运动中的合法代表权。1979年10月,国际奥委会通过《名古屋决议》,恢复了中国奥委会在国际奥委会的权利,确认中国为“中国奥委会”,使用中华人民共和国国旗和国歌;同时规定设在台北的奥委会为“中华台北奥委会”,使用“不同于其使用的旗、徽和歌”。会址设在台北的奥委会改名为“CHINESE TAIPEI OLYMPIC COMMITTEE”。大陆方面自此将“CHINESE TAIPEI”翻译为“中国台北”。何振梁于1981年和1985年当选为国际奥委会委员和执委会委员。1985年,国际奥委会启动奥林匹克全球伙伴计划(TOP计划),四年一期,实施TOP营销计划实施以来,这项收入不断攀升,并逼近电视转播权收入。1986年,国际奥委会授予中国奥委会奥林匹克杯,以表彰中国对发展中国家,特别是对非洲国家体育援助作出的巨大贡献。1989年8月,何振梁当选为国际奥委会副主席,这是中国人首次担任这个职务。 [5]  1993年,中国奥委会曾向国际奥委会提出了北京举办2000年奥运会的申请,但最后以2票之差而落选。1993年6月20日,国际奥委会执委会决定暂时承认马其顿为其成员。同年9月,巴勒斯坦被接受为临时委员。1993年9月,布隆迪、佛得角、科摩罗群岛、圣多美和普林西比、多米尼加等被接纳为新成员。1994年6月,瑙鲁加入国际奥委会。1994年8月29日至9月3日,第12届奥林匹克代表大会在巴黎召开,它也是现代奥林匹克运动恢复100周年的庆祝活动的一部分。参加本届大会的代表共有3427人,其中:国际奥委会委员和名誉委员101人;来自 48个国际单项体联的代表132人;来自191个国家或地区奥委会的代表407人;运动员代表67人;记者代表738人。在大会上发言的共达439人次。1995年7月,柬埔寨、几内亚比绍加入国际奥委会。1996年,国际奥委会与联合国粮农组织(FAO)签署了合作协议,双方愿采取积极具体措施为全球农村地区的人口谋取福利。国际奥委会与奔驰汽车公司就在6个非洲国家体育发展签订了一项耗资600万马克的“非洲奥林匹克计划”。1997年和1998年间,国际奥委会曾通过中国奥委会的协助,两次向朝鲜民主主义人民共和国体育界提供了食品援助。另外,国际奥委会还向巴塞罗那市签署合同,帮助重建萨拉热窝的扎特拉体育设施。1997年3月5日,国际奥委会同美国广播公司(NBC)签署了价值23亿美元电视转播权合同。根据协议,国际奥委会授予NBC在美国境内转播2004年奥运会、2006年冬奥会和2008年奥运会的权利,5月,国际奥委会和悉尼奥运会组委会共同与欧洲广播公司(EBU)签署了价值3.5亿美元的合同。另外,国际奥委会还制定了一项“奥林匹克计划”(TDP),利用五环标志和各国奥委会的会徽和名称进行市场销售。这一计划的实施,使得各国奥委会、尤其是发展中国家奥委会均能从中受益。 [6]  1997年7月3日,国际奥委会主席萨马兰奇宣布香港将以"中国香港"的名义参加奥运会。1998年12月,帕劳、厄立特里亚加入国际奥委会。1999年1月6日,中国奥委会全会在北京召开,决定由北京再次代表中国申办2008年第29届奥运会。1999年2月,国际奥委会在洛桑召开了世界反兴奋剂大会。大会通过了《洛桑宣言》,决定成立一个世界性的、独立的世界反兴奋剂组织(WADA)。国际奥委会承诺向该机构提供2500万美元的资金。1999年10月,在雅典召开的国际奥委会执委会决定:每四年在奥运会的发祥地举办一届世界青年节。2000年3月6日,国际奥委会在巴黎授予中国女子足球队“妇女和体育奖”。2001年7月,在第112届国际奥委会全会上,北京赢得了2008年奥运会主办权。在国际奥委会的倡议之下,2001年第56届联合国代表大会通过了一项由世界上170多个国家提出的题为“通过体育和奥林匹克理想来建立一个和平和更加美好的世界”的决议,呼吁在2002年盐湖城冬季奥运会期间实现“奥林匹克休战”。2003年7月,第115届国际奥委会全会于在布拉格召开,经过两轮投票,温哥华最后以56票胜出成为2010年第21届冬季奥运会举办城市。2004年,印度尼西亚的国际奥委会委员哈桑因涉嫌在一起建设工程中进行非法活动被判刑。同年8月他被赶出了国际奥委会。2005年,前国际奥委会副主席、韩国人金云龙被迫辞职。起因是他已经由于涉嫌韩国的体育-金钱腐败案件而被停职。为了避免被奥委会驱逐他不得不选择辞职。2004年,保加利亚国际奥委会委员伊万·斯拉夫科夫涉嫌腐败活动,被赶出了国际奥委会。2005年12月,国际奥委会委员,法国前体育部长和1976年蒙特利尔奥运会110米栏金牌得主德鲁特因为腐败案件被停职。 [7]  2006年15日,韩国籍国际奥委会委员朴永圣因为涉嫌挪用公款,已经被暂时剥夺了委员资格。国际奥委会在一份声明中说,在国际奥委会道德委员会对朴永圣调查期间,朴永圣“一切与国际奥委会委员资格有关的权利都将被暂时剥夺”。2011年7月8日,鉴于荷属安的列斯群岛已于2010年10月10日正式解散,国际奥委会第123次全会据此取消荷属安的列斯群岛的国家奥委会资格,同时批准了一系列相应措施,以尽可能保护该国运动员的利益,尤其是参与2012年伦敦奥运会的相关权益。 [8]  2013年9月9日,国际奥委会第125次全会在阿根廷首都布宜诺斯艾利斯投票选出了新一任的国际奥委会主席。最终来自德国的托马斯·巴赫从6名候选人中胜出,成为第九任国际奥委会主席,任期8年。上一任主席雅克·罗格退休。同时经过两轮投票,东京获得2020年夏季奥运会主办权。这是东京在1964年首次举办夏季奥运会后再获举办权。 [9]  2013年12月7日,国际奥委会主席巴赫表示,如果印度不能遵守奥林匹克反腐败规定将面临被开除会籍的下场。 [10]  2014年5月9日,国际奥委会发布公告,美国全国广播公司(NBC)与其签署了一份价值75亿美元的协议,获得了从2021到2032年间奥运会的独家转播权。协议还要求,NBC需另外支付1亿美元,用于2015至2020年间多项体育运动的推广。进入21世纪,NBC便一直独享奥运会转播权,其在2011年签署的一份文件就以44亿美元取得了从2014到2020年间历届奥运会的转播权。 [11]  2015年12月,国国际奥委会在官方网站正式宣布了反腐监督热线——这在历史上是前所未有的。决定将从2016年开始,对各国际体育组织实施财政和管理审计,审计将在第三方独立组织的主持下进行,包括国际奥委会和奥林匹克运动会组织委员会也包括在内。 [12]  2014年12月8日,在摩纳哥国际奥委会第127次全会表决了这一名为《奥林匹克2020议程》的改革提案,获全票通过(104名国际奥委会委员96人与会、8人缺席)。国际奥委会的奥运改革拉开序幕。全会同时投票,正式接纳科索沃奥委会成为其成员。 [13]  新的申办体系下,国际奥委会将变“申办”为“邀请”,申办城市可于邀请阶段与国际奥委会进行探讨,并需将承办奥运会融入其自身的发展规划中,而不是反向为之,国际奥委会甚至允许跨城、跨境联合申办,只不过巴赫称那须得是“特殊情况下的特事特办”。在新的奥运设项规则下,国际奥委会变大项基础制为小项基础制,不再将设项局限于28个大项,而是通过规定运动员、官员和小项的总数上限来实现规模控制,其中夏季奥运会的“帽”是10500名运动员、310个小项,冬奥会则为2900名运动员和100个小项。东道主将在增项议题上拥有更多主动权。 [14-15]  2015年7月31日,国际奥委会第128次全会在吉隆坡举行,经过85位国际奥委会委员的投票,国际奥委会主席巴赫宣布,北京获得2022年冬季奥运会举办权。北京成为首个同时主办夏季奥运会和冬季奥运会的城市,瑞士西南部城市洛桑则获得了2020年青冬奥会的举办权。 [16]  2015年8月2日,通过由国际奥委会所有协会成员参与的投票决定,南苏丹得到国际奥委会的最终认可,成为奥林匹克大家庭的最新成员,也就是第206名成员国。 [17]  2016年6月3日,国际奥委会发表公报宣布组成难民奥林匹克运动队,以迎接即将到来的里约奥运会。这支难民奥林匹克运动队由10名运动员组成,其中包括5名南苏丹难民、2名叙利亚难民、2名刚果(金)难民和1名埃塞俄比亚难民。他们将参加里约奥运会田径、游泳和柔道等项目的比赛。 [18]  全会同时表决通过了空手道、滑板、竞技攀岩、冲浪和棒垒球这5大项运动进入2020年东京奥运会的竞赛项目。 [19]  2017年7月11日,国际奥委会130届全会举行投票,一致决定2024年和2028年夏季奥运会的承办城市将同时产生,唯一的悬念是两个申办城市洛杉矶和巴黎谁先举办。 [20]  2019年6月23日,国际奥委会在瑞士洛桑举行国际奥委会新总部的揭幕。 [21] 
收起全文
精华内容
参与话题
问答
  • 浅谈 IOC 什么是 IOC

    万次阅读 多人点赞 2019-05-27 14:19:26
    本文以文字为主题,并没有代码案例,仅限于记录自己对于 IOC 的理解,文中也啥特别高深的东西,大牛和大佬可以忽略本文,以免浪费您宝贵的时间 什么是 IOCIOC (Inversion Of Control,控制倒转),是spring...

    本文以文字为主题,并没有代码案例,仅限于记录自己对于 IOC 的理解,文中也啥特别高深的东西,大牛和大佬可以忽略本文,以免浪费您宝贵的时间

    什么是 IOC ?

         IOC (Inversion Of Control,控制倒转),是spring的核心,贯穿始终,所谓IOC ,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。所有的类都会在spring容器中登记,告诉spring你是个什么,你需要什么,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

    IOC 的主要作用是什么?

         IOC 理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦,那么问题来了,什么是解耦呢?

    扩充话题

         解耦通俗地说就是两个东西原来互相影响,现在让他们独立发展,核心思想还是最小职责,每个地方都只做一件事情,只要一个地方负责了多项事情,就存在解耦的可能。在系统每个层次都可以体现解耦的思想,比如在架构层面把存储和业务逻辑解耦,把动态页面和静态页面解耦,在模块层面把业务模块和统计模块解耦,在代码层面把多个功能解耦等等。解耦的思想很好,但是没必要为了解耦而解耦,还是要从业务需求以及系统定位出发,满足一段时间内系统发展的需要即可。简单通俗的理解就是,电脑拔掉鼠标键盘显示器依然可以运行,这就是解耦。

    什么是控制反转?

         就相当于,假如有 a 和 b 两个对象,在注入 IOC 之前,a 依赖于 b 那么对象 a 在初始化或者运行到某一点的时候,自己必须主动去创建对象 b 或者使用已经创建的对象 b ,无论是创建还是使用对象 b ,控制权都在自己手上 ,而注入 IOC 之后就变了,对象 a 与对象 b 之间失去了直接联系,当对象 a 运行到需要对象 b 的时候,IOC 容器会主动创建一个对象 b 注入到对象 a 需要的地方。其实通过上边这个举例可以很明显的就看出来,对象 a 获得依赖对象 b 的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

    什么是依赖注入?

         依赖注入让 bean 与 bean 之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起,其实依赖注入和控制反转是同一个概念,不管是依赖注入,还是控制反转,都采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。相当于将需要的接口实现注入到需要它的类中,这可能就是“依赖注入”说法的来源了,其实上边控制反转中的例子已经将这两个都包括了

    IOC  可以给我们带来什么好处?

        IOC 的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理。

            第一,资源集中管理,实现资源的可配置和易管理

            第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度

        其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。IoC很好的体现了面向对象设计法则之一好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找

     

    展开全文
  • IOC

    千次阅读 2019-06-24 21:53:42
    1IoC理论的背景  我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械...

    转自:http://blog.csdn.net/wanghao72214/article/details/3969594

    1 IoC理论的背景    

      我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。

     

    图1:软件系统中耦合的对象

          如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。

        齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。

     

     

      图2:对象之间复杂的依赖关系

         耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中,很多的J2EE项目均采用了IOC框架产品Spring。

    2 什么是控制反转(IoC)    

      IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。    

      1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。对于面向对象设计及编程的基本思想,前面我们已经讲了很多了,不再赘述,简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦,如下图:

     

     

    图3:IOC解耦过程

        大家看到了吧,由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。 我们再来做个试验:把上图中间的IOC容器拿掉,然后再来看看这套系统:  

    图4:拿掉IoC容器后的系统

         我们现在看到的画面,就是我们要实现整个系统所需要完成的全部内容。这时候,A、B、C、D这4个对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。所以,如果真能实现IOC容器,对于系统开发而言,这将是一件多么美好的事情,参与开发的每一成员只要实现自己的类就可以了,跟别人没有任何关系!    

      我们再来看看,控制反转(IOC)到底为什么要起这么个名字?我们来对比一下:   
      软件系统在没有引入IOC容器之前,如图1所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。

      软件系统在引入IOC容器之后,这种情形就完全改变了,如图3所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。    

      通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

     

    3 IOC的别名:依赖注入(DI)    

      2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 

      所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。    

      我们举一个生活中的例子,来帮助理解依赖注入的过程。大家对USB接口和USB设备应该都很熟悉吧,USB为我们使用电脑提供了很大的方便,现在有很多的外部设备都支持USB接口。

     

    图6:USB接口和USB设备

     

         现在,我们利用电脑主机和USB接口来实现一个任务:从外部USB设备读取一个文件。    

       电脑主机读取文件的时候,它一点也不会关心USB接口上连接的是什么外部设备,而且它确实也无须知道。它的任务就是读取USB接口,挂接的外部设备只要符合USB接口标准即可。所以,如果我给电脑主机连接上一个U盘,那么主机就从U盘上读取文件;如果我给电脑主机连接上一个外置硬盘,那么电脑主机就从外置硬盘上读取文件。挂接外部设备的权力由我作主,即控制权归我,至于USB接口挂接的是什么设备,电脑主机是决定不了,它只能被动的接受。电脑主机需要外部设备的时候,根本不用它告诉我,我就会主动帮它挂上它想要的外部设备,你看我的服务是多么的到位。这就是我们生活中常见的一个依赖注入的例子。在这个过程中,我就起到了IOC容器的作用。    

      通过这个例子,依赖注入的思路已经非常清楚:当电脑主机读取文件的时候,我就把它所要依赖的外部设备,帮他挂接上。整个外部设备注入的过程和一个被依赖的对象在系统运行时被注入另外一个对象内部的过程完全一样。 我们把依赖注入应用到软件系统中,再来描述一下这个过程:
      对象A依赖于对象B,当对象 A需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。     在传统的实现中,由程序内部代码来控制组件之间的关系。我们经常使用new关键字来实现两个组件之间关系的组合,这种实现方式会造成组件之间耦合。IOC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。

     

      4 IOC为我们带来了什么好处

         我们还是从USB的例子说起,使用USB外部设备比使用内置硬盘,到底带来什么好处?     

      第一、USB设备作为电脑主机的外部设备,在插入主机之前,与电脑主机没有任何的关系,只有被我们连接在一起之后,两者才发生联系,具有相关性。所以,无论两者中的任何一方出现什么的问题,都不会影响另一方的运行。这种特性体现在软件工程中,就是可维护性比较好,非常便于进行单元测试,便于调试程序和诊断故障。代码中的每一个Class都可以单独测试,彼此之间互不影响,只要保证自身的功能无误即可,这就是组件之间低耦合或者无耦合带来的好处。

         第二、USB设备和电脑主机的之间无关性,还带来了另外一个好处,生产USB设备的厂商和生产电脑主机的厂商完全可以是互不相干的人,各干各事,他们之间唯一需要遵守的就是USB接口标准。这种特性体现在软件开发过程中,好处可是太大了。每个开发团队的成员都只需要关心实现自身的业务逻辑,完全不用去关心其它的人工作进展,因为你的任务跟别人没有任何关系,你的任务可以单独测试,你的任务也不用依赖于别人的组件,再也不用扯不清责任了。所以,在一个大中型项目中,团队成员分工明确、责任明晰,很容易将一个大的任务划分为细小的任务,开发效率和产品质量必将得到大幅度的提高。

         第三、同一个USB外部设备可以插接到任何支持USB的设备,可以插接到电脑主机,也可以插接到DV机,USB外部设备可以被反复利用。在软件工程中,这种特性就是可复用性好,我们可以把具有普遍性的常用组件独立出来,反复利用到项目中的其它部分,或者是其它项目,当然这也是面向对象的基本特征。显然,IOC不仅更好地贯彻了这个原则,提高了模块的可复用性。符合接口标准的实现,都可以插接到支持此标准的模块中。

         第四、同USB外部设备一样,模块具有热插拔特性。IOC生成对象的方式转为外置方式,也就是把对象生成放在配置文件里进行定义,这样,当我们更换一个实现子类将会变得很简单,只要修改配置文件就可以了,完全具有热插拨的特性。

      以上几点好处,难道还不足以打动我们,让我们在项目开发过程中使用IOC框架吗?

    5 IOC容器的技术剖析

        IOC中最基本的技术就是“反射(Reflection)”编程,目前.Net C#、Java和PHP5等语言均支持,其中PHP5的技术书籍中,有时候也被翻译成“映射”。有关反射的概念和用法,大家应该都很清楚,通俗来讲就是根据给出的类名(字符串方式)来动态地生成对象。这种编程方式可以让对象在生成时才决定到底是哪一种对象。反射的应用是很广泛的,很多的成熟的框架,比如象Java中的Hibernate、Spring框架,.Net中 NHibernate、Spring.Net框架都是把“反射”做为最基本的技术手段。           

      反射技术其实很早就出现了,但一直被忽略,没有被进一步的利用。当时的反射编程方式相对于正常的对象生成方式要慢至少得10倍。现在的反射技术经过改良优化,已经非常成熟,反射方式生成对象和通常对象生成方式,速度已经相差不大了,大约为1-2倍的差距。

        我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

    6 IOC容器的一些产品

        Sun ONE技术体系下的IOC容器有:轻量级的有Spring、Guice、Pico Container、Avalon、HiveMind;重量级的有EJB;不轻不重的有JBoss,Jdon等等。Spring框架作为Java开发中SSH(Struts、Spring、Hibernate)三剑客之一,大中小项目中都有使用,非常成熟,应用广泛,EJB在关键性的工业级项目中也被使用,比如某些电信业务。

        .Net技术体系下的IOC容器有:Spring.Net、Castle等等。Spring.Net是从Java的Spring移植过来的IOC容器,Castle的IOC容器就是Windsor部分。它们均是轻量级的框架,比较成熟,其中Spring.Net已经被逐渐应用于各种项目中。

    7 使用IOC框架应该注意什么

        使用IOC框架产品能够给我们的开发过程带来很大的好处,但是也要充分认识引入IOC框架的缺点,做到心中有数,杜绝滥用框架。

        第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。

        第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。

        第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。

        第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。

        我们大体可以得出这样的结论:一些工作量不大的项目或者产品,不太适合使用IOC框架产品。另外,如果团队成员的知识能力欠缺,对于IOC框架产品缺乏深入的理解,也不要贸然引入。最后,特别强调运行效率的项目或者产品,也不太适合引入IOC框架产品,象WEB2.0网站就是这种情况。

    转载于:https://www.cnblogs.com/CSharpSPF/p/3585517.html

    展开全文
  • IoCIoC容器基本原理

    千次阅读 2019-06-02 22:10:51
    上一篇学习了IoC的基础知识,明白了IoC是什么,为什么需要使用IoC以及IoC和DI的区别,接下来让我们继续往下学习IoC容器的基本原理。 IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC具有负责实例化,定位,...

    上一篇学习了IoC的基础知识,明白了IoC是什么,为什么需要使用IoC以及IoC和DI的区别,接下来让我们继续往下学习IoC容器的基本原理。

    IoC容器的概念

    IoC容器就是具有依赖注入功能的容器,IoC具有负责实例化,定位,配置应用程序中的对象及建立这些对象之间的依赖。应用程序无需直接new相关对象,应用程序通过IoC容器进行组装。在Spring中IoC容器实际代表者是BeanFactory。
    IoC容器怎么知道他管理那些对象,这就需要配置文件告诉他了。一般使用xml配置文件进行配置元数据,Spring IoC容器通过读取配置文件进行应用中各个对象实例化及装配。Spring与配置文件是完全解耦的,可以使用其他方式配置元数据,可以是注解、基于Java文件等。说到现在,Spring管理的对象叫什么呢?这是下一个需要介绍的——Bean

    Bean的概念

    由IoC容器管理的组成应用程序的那些对象就叫做Bean,Bean是由Spring容器初始化、装配及管理的对象,除此以外,与应用程序中的其他对象没有什么区别。Spring是通过配置元数据进行Bean的实例化,管理Bean之间的依赖关系以及管理Bean。

    永远的Helloworld

    1. 创建标准Java项目,选择“File”—>“New”—>“Other”;然后在弹出来的对话框中选择“Java Project”创建标准Java项目;并完成“lib”和“resources”文件夹的创建;项目目录结构如下图所示,其中“src”用于存放java文件;“lib”用于存放jar文件;“resources”用于存放配置文件;
      在这里插入图片描述
    2. 将核心jar包和依赖jar包添加到“lib”文件夹中,
      在这里插入图片描述
    3. 配置项目依赖库文件,右击选择“build path”,选择“Configure Build Path”,然后在弹出的对话框中点击“Add JARS”在弹出的对话框中选择“lib”目录下的jar包;然后再点击“Add Library”,然后在弹出的对话框中选择“Junit”,选择“Junit4”;
      在这里插入图片描述
      在这里插入图片描述
    4. 项目搭建完成,新建接口HelloApi,定义一个“sayHello”方法
      在这里插入图片描述
    5. 通过实现接口完成打印“Hello World”功能
      在这里插入图片描述
    6. 接口和实现类都已经完成,Spring能够管理它们还需要配置文件,让IoC容器知道管理哪些对象,配置文件放入resources文件夹中
      在这里插入图片描述
    7. 所有的准备工作已经完成,接下来如何获取IoC容器并完成我们需要的功能?首先实例化一个IoC容器,然后从容器中获取需要的对象,然后调用接口完成我们需要的功能。
      在这里插入图片描述

    详解IoC容器

    org.springframework.beans包中的BeanFactory接口代表了Spring IoC容器,提供了IoC容器最基本功能;而
    org.springframework.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成,国际化处理以及提供不同层次的context实现(针对web提出的WebApplicationContext)。总结一下就是,BeanFactory提供了IoC的基本功能,而ApplicationContext增加跟过支持企业级功能支持。

    • XmlBeanFactory:BeanFactory实现,提供基本的IoC容器功能,可以从classpath或文件系统等获取资源;

      1. File file = new File("fileSystemConfig.xml");
        Resource resource = new FileSystemResource(file);
        BeanFactory beanFactory = new XmlBeanFactory(resource);
        
      2. Resource resource = new ClassPathResource("classpath.xml");                 
        BeanFactory beanFactory = new XmlBeanFactory(resource);
        
    • ClassPathXmlApplicationContext:ApplicationContext实现,从classpath获取配置文件;

       BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath.xml");
      
    • FileSystemXmlApplicationContext:ApplicationContext实现,从文件系统获取配置文件。

       BeanFactory beanFactory = new FileSystemXmlApplicationContext("fileSystemConfig.xml");
      

    ApplicationContext接口获取Bean方法简介:

    • Object getBean(String name) 根据名称返回一个Bean,客户端需要自己进行类型转换;
    • T getBean(String name, Class requiredType) 根据名称和指定的类型返回一个Bean,客户端无需自己进行类型转换,如果类型转换失败,容器抛出异常;
    • T getBean(Class requiredType) 根据指定的类型返回一个Bean,客户端无需自己进行类型转换,如果没有或有多于一个Bean存在容器将抛出异常;
    • Map<String, T> getBeansOfType(Class type) 根据指定的类型返回一个键值为名字和值为Bean对象的 Map,如果没有Bean对象存在则返回空的Map。

    IoC容器的工作原理

    1. 准备配置文件:在xml文件中,声明Bean定义就是为Bean配置元数据
    2. 由IoC容器进行解析元数据:IoC容器的Bean Reader读取并解析配置文件,根据定义生成BeanDefinition配置元数据对象,IoC容器根据BeanDefinition进行实例化、配置及组装Bean。
    3. 实例化IoC容器:由客户端实例化容器,获取需要的Bean
      在这里插入图片描述
    展开全文
  • ioc

    2018-09-23 09:29:14
    IOC:比如有一个类,在类中有一个非静态的方法,当我们要在另一个类中去调用这个类的方法,创建这个类的对象,使用对象点的方式去调用方法,创建类对象的过程是new出来的 而ioc不是通过new来创建对象,而是交给...

    IOC:比如有一个类,在类中有一个非静态的方法,当我们要在另一个类中去调用这个类的方法,创建这个类的对象,使用对象点的方式去调用方法,创建类对象的过程是new出来的

    而ioc不是通过new来创建对象,而是交给spring的配置文件去创建对象

    Spring是一站式框架,在其三层结构中,他的每一层都提供了不同的技术

    web层 springmvc

    Service层 spring ioc

    dao层 jdbc模板

     

    Spring 的IOC操作

    1.ioc的配置方式

    2.ioc的注解方式

     

    ioc底层原理用到的技术

    1).xml配置文件

    2).dom4j解析xml

    3).工厂设计模式

    4).反射

     

    注解的写法 @注解名称(属性名=属性值)

    注解可以使用在类上面,可以使用在方法、属性上面

    使用注解可以完成功能

    使用注解必须导入aop包

    展开全文
  • spring ioc

    2019-04-06 14:17:56
    spring ioc什么是spring为什么使用springspring的IOCspring IOC有什么特点 什么是spring Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented ...
  • IOC实现原理

    2019-10-15 21:53:17
    对Spring IOC的理解离不开对依赖反转模式的理解,我们知道,关于如何反转对依赖的控制,把控制权从具体业务对象手中转交到平台或者框架中,是解决面向对象系统设计复杂性和提高面向对象系统可测试性的一个有效的解决...
  • Spring原理/SpringMVC原理/IOC/AOP原理

    千次阅读 2019-05-27 10:03:34
    Spring原理/SpringMVC原理/IOC/IOP原理我的微型IOC框架实现 我的微型IOC框架实现 当你打开这本书的时候我要告诉你的第一句话就是认真把前言读完,因为前言概括的本书的大纲以及思想。 本书适合什么读者阅读呢?适合...
  • Spring IOC原理

    2018-09-29 09:44:00
    Spring IOC原理,类的继承关系,依赖注入和控制反转等关系
  • 【Spring-IOC基础】深入浅出Spring-IOC

    万次阅读 2020-04-20 16:20:03
    IOC(Inversion Of Control) 1.概念: 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency ...
  • IoC

    2014-03-07 13:20:41
    IoC: Inversion of Control,控制反转, 控制权从应用程序转移到框架(如IoC容器),是框架共有特性   1、为什么需要IoC容器 1.1、应用程序主动控制对象的实例化及依赖装配  Java代码  ...
  • SpringIoc 实现原理

    万次阅读 多人点赞 2019-04-20 16:44:33
    什么是SpringIOC spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合 “控制反转”,不是什么技术,而是一种设计思想...
  • 谈谈对Spring IOC的理解

    2018-12-06 00:32:23
     学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring...
  • IoCIoC基础

    2019-06-02 19:33:22
    上文提到Spring的核心是IoC和AOP,今天开始学习核心之一的IoC,同样是带着IoC是什么,为什么,怎么用来学习IoC IoC是什么 先看看IoC的全名是什么。IoC——Inversion of Control,即“控制反转”。这个可不是什么技术...
  • Spring IoC容器

    千次阅读 2019-05-31 11:40:01
    Spring框架的IoC容器的全面的处理是与Spring的面向切面编程(AOP)的彻底实现紧密相关的。Spring框架拥有他自己的AOP框架,该技术在概念上是很容器理解的,并且成功的解决了在Java企业编程中的AOP需求的80%的点。 该框...
  • 浅谈IOC--说清楚IOC是什么

    万次阅读 多人点赞 2018-03-29 16:22:44
    什么是IOC3.IOC也叫依赖注入(DI)4.IOC的优缺点5.IOC容器的技术剖析6.IOC容器的一些产品7.参考博文本文旨在用语言(非代码)说清楚IOC到底是什么,没有什么高深的技术,园中的老牛、大虾们看到这里可以绕行了,以免浪费...
  • IOC

    2011-05-17 17:06:54
    IOC(控制反转,也叫依赖注入):是一种设计模式而不是编程技术。使用IOC后,我们不需要自己去创建某个类的实例,而由IOC容器去创建,当我们需要使用某个对象时,直接到容器中去获取就可以了。 ...
  • IOC详解

    2020-09-04 23:51:00
    IOC概念 什么是IOC: 控制反转,把对象创建和对象间的调用过程,交给Spring进行管理。 使用IOC可以降低耦合度。 IOC底层原理:XML解析,工厂模式,反射。 图解IOC底层原理: IOC思想基于IOC容器完成的,IOC容器...
  • 什么是 IoC

    千次阅读 2019-07-15 10:02:28
    什么是 IoCIoC,Inversion of Control(控制反转)。 是一种设计思想,在Java开发中,将你设计好的对象交给容器控制,而不是显示地用代码进行对象的创建。 把创建和查找依赖对象的控制权交给 IoC 容器,由 ...
  • ioc编程

    千次阅读 2020-03-29 12:02:35
    一、什么是ioc? 首先要强调的是ioc是一种编程思想,而不是技术。ioc的全称叫inversion of control,即控制反转的意思。那控制反转又是什么意思呢?通俗点来说就是原来你控制的事情,现在不再由你来控制。在java...
  • ioc本质

    2020-05-08 16:57:18
    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring...
  • 在前面我们讲到了IOC的一个演变,那么这节我们就看看IOC的一个原理。 一、IOC底层原理使用核心技术 XML解析、工厂模式、反射。 (DefaultSingletonBeanRegistry、AbstractBeanFactory、BeanFactory) 二、...
  • SpringIOC

    2020-04-10 13:15:11
    SpringIOC开发第一个Spring程序(IOC)springIOC发展史IOC控制反转/依赖注入图解三种方式的区别 开发第一个Spring程序(IOC) ApplicationContext conext = new ClassPathXmlApplicationContext(...

空空如也

1 2 3 4 5 ... 20
收藏数 86,899
精华内容 34,759
关键字:

ioc