spring的ioc| 耗时:0.347秒|349183条结果

Spring IOCSpring IOC 具体过程

上回展示了IOC大致实现原型,那么在Spring框架中具体是怎么实现这个容器根据metadata元信息配置加载POJO过程呢?在整个Spring IOC容器工作过程中有很多地方是设计地相当灵活,供给使用者很多空间去完成自己任务,而不是一味地只是完成容器机械过程。 这是整个IOC容器
http://www.itnose.net/detail/6399153.html 2015-10-31 17:16   [Spring]

Spring IOC原理

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接口。 图5: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是从JavaSpring移植过来IOC容器,CastleIOC容器就是Windsor部分。它们均是轻量级框架,比较成熟,其中Spring.Net已经被逐渐应用于各种项目中。7. 使用IOC框架应该注意什么使用IOC框架产品能够给我们开发过程带来很大好处,但是也要充分认识引入IOC框架缺点,做到心中有数,杜绝滥用框架。第一、软件系统中由于引入了第三方IOC容器,生成对象步骤变得有些复杂,本来是两者之间事情,又凭空多出一道手续,所以,我们在刚开始使用IOC框架时候,会感觉系统变得不太直观。所以,引入了一个全新框架,就会增加团队成员学习和认识培训成本,并且在以后运行维护中,还得让新加入者具备同样知识体系。第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定损耗。如果你要追求运行效率话,就必须对此进行权衡。第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量配制工作,比较繁琐,对于一些小项目而言,客观上也可能加大一些工作成本。第四、IOC框架产品本身成熟度需要进行评估,如果引入一个不成熟IOC框架产品,那么会影响到整个项目,所以这也是一个隐性风险。我们大体可以得出这样结论:一些工作量不大项目或者产品,不太适合使用IOC框架产品。另外,如果团队成员知识能力欠缺,对于IOC框架产品缺乏深入理解,也不要贸然引入。最后,特别强调运行效率项目或者产品,也不太适合引入IOC框架产品,象WEB2.0网站就是这种情况。
http://www.itnose.net/detail/499434.html 2014-01-25 13:44   [Spring]

springIoC介绍

Spring是j2ee领域比较出名一个应用框架,其中包括AOP、IoC/DI、MVC等方面应用,而且可以灵活根据项目情况来是用它一部分。在所有内容中,IoC/DI(反向控制,依赖注入)是比较好一个东西。 注:什么是依赖注入? 面向对象一个基础叫做基于/面向接口编程,即将接口与实现分离
http://www.itnose.net/detail/499422.html 2014-01-25 13:44   [Spring]

模拟SpringIoc

Spring容器来说,它首先是一个巨大工厂,负责创建所有Bean实例,整个应用所有组件都由Spring容器负责创建。不仅如此,Spring容器还扩展了这种简单工厂模式,他还可以管理Bean实例之间依赖关系;而且,如果中Bean实例具有singleton行为特征,则Spring容器还会缓存
http://www.itnose.net/detail/491389.html 2014-01-24 15:05   [Spring]

SpringIoC容器

。由IoC容器主动创建UserDao实现类实例,并注入到用户注册类中。我们下面将使用Spring提供IoC容器来管理我们用户注册类。 用户注册类UserRegister部分代码如下: public class UserRegister {     private
http://www.itnose.net/detail/491279.html 2014-01-24 15:04   [Spring]

Spring IOC理解总结

SpringIoc理解文章,好多人对Ioc和DI解释都晦涩难懂,反正就是一种说不清,道不明感觉,读完之后依然是一头雾水,感觉就是开涛这位技术牛人写得特别通俗易懂,他清楚地解释了IoC(控制反转) 和DI(依赖注入)中每一个字,读完之后给人一种豁然开朗感觉。我相信对于初学Spring框架人对
http://www.itnose.net/detail/6496658.html 2016-05-03 16:02   [Spring]

SpringIOC和AOP

  IOC:即控制反转,主要意思就是Spring容器来管理对象初始化,而不需要程序员人工使用new方式来创建对象,并且当A对象依赖于B对象时,在配置文件中可以指定,同样不需要程序员在构造函数或是setter中进行对象注入。   AOP:面向切面编程。其实就是一种新不同于继承代码重用技术
http://www.itnose.net/detail/6457854.html 2016-02-25 10:17   [J2SE]

springAOP和IOC

我不是很懂springAOP和IOC,希望哪位大侠指教。注入又是怎么回事呢? 回复讨论(解决方案) 原理是反射,动态代理, 在根源点貌似是.class字节码可以用各种方式生成,加载,读取 楼主啊,这种问题来CSDN问,怕是效率太低了。如果不能买本书学习学习话,至少也先Google
http://www.itnose.net/detail/211621.html 2014-01-01-15:59   [J2EE]

Spring Ioc 源码分析(一)Spring Ioc容器加载

1.目标:熟练使用spring,并分析其源码,了解其中思想。这篇主要介绍spring ioc 容器加载2.前提条件:会使用debug3.源码分析方法:Intellj idea debug 模式下源码追溯通过ClassPathXmlApplicationContext 进行xml 件读取,从
http://www.itnose.net/detail/6658625.html 2016-11-01 01:57   [Spring]

spring ioc注解 IOC

、setter方法、构造器函数等  4、使用@Autowired注解须有且仅有一个与之匹配Bean,当找不到匹配 Bean 或者存在多个匹配Bean时,Spring 容器将抛出 异常  5、Spring 允许我们通过 @Qualifier 注释指定注入 Bean 名称
http://www.itnose.net/detail/6400055.html 2015-11-02 18:50   [Spring]

spring ioc

。HiveMind和Spring采用这种方式。 类型3 (基于 构造函数): 通过构造函数参数为可服务对象指定服务。PicoContainer只使用这种方式。HiveMind和Spring也使用这种方式。 优缺点 编辑 IoC最大好处是什么?因为把对象生成放在了XML里定义,所以
http://www.itnose.net/detail/6692832.html 2016-12-19 15:53   [Spring]

Spring ioc

       Spring两个很重要功能ioc和aop        依赖反转:依赖对象获得被反转;许多非凡应用都是由两个或多个类通过彼此合作来上线业务逻辑,这使得每个
http://www.itnose.net/detail/6178124.html 2014-12-21 14:19   [Spring]

SpringIOC

  好几次面试都遇到面试官问:"你简历上说你熟悉ssh框架,那你简单谈谈springioc,aop等",遇到这类问题我真很后悔之前为什么不好好打基础看概念然后在实践(因为学这个时候我都是边看视频边实践,所以过了一段时间概念性东西很快就忘记了)。现在来总结下IOC是个
http://www.itnose.net/detail/6160350.html 2014-11-26 17:39   [J2SE]

Spring??IoC

    控制反转(Inversion ofControl,英文缩写为IoC)是一种可以解耦方法,不是什么技术,是一种思想,也是轻量级Spring框架核心。控制反转一般分为两种类型,依赖注入(DependencyInjection,简称DI)和依赖查找。控制反转是
http://www.itnose.net/detail/6138402.html 2014-10-28 09:01   [Spring]

  1  2  3  4  5 下一页>