Spring核心(ioc控制反转)



IoC,Inversion Of Control 即控制反转,由容器来管理业务对象之间的依赖关系,而非传统方式中的由代码来管理。

其本质,即将控制权由应用程序代码转到了外部容器,控制权的转移就是所谓的反转,其带来的最大的好处是降低了业务对象之间的依赖程度,即实现了解耦。

Spring的IoC容器主要使用DI(Dependency Injection,依赖注入)方式实现的。不需要主动查找,对象的查找、定位和创建全部由容器管理,容器会将符合依赖关系的对象通过属性(setter等)或者构造函数传递给需要的对象。

使用IoC可以带来以下好处:

1、查询依赖操作和应用代码分离,大量减少了Factory和Singleton的数量,使代码层次更加清晰,主要原因是我们不再查找、定位、创建和管理对象之间的依赖关系了,都交给IoC容器管理了

2、没有侵入性,不需要依赖容器的API,也不需要实现一些特殊接口。这样我们的受控对象可以搬出容器进而单独使用。

3、可以从IoC容器中直接获得一个对象然后直接使用,而无需考虑对象的创建过程。(工厂模式)

从网上看了一个例子,觉得不错,贴过来帮助我们理解:

我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。  那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由
spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转

其实,我们可以把IoC看做是工厂模式的升华,IoC好比是一个大工厂,只不过在这个大工厂里生成的对象都是在XML文件中定义的,然后利用Java的反射实例化。在没有Spring之前我们也是这么做的,只是Spring的IoC更加强大完善。

有利就有毙,IoC也有一定的弊端:

1、使用反射变成,在效率上有些损耗。

2、缺乏更加智能的IDE,写XML中时,错误不容易暴露,推迟到运行期才能发现。

但相对于IoC提高的维护性和灵活性来说,这点缺点又显得微不足道

写到最后,忽然想到《走遍美国》里,唱片公司制片在rebaca录制完唱片后对她说的一句话:Don‘t call us,we‘ll call you

用这句话来形容IoC再合适不过。

时间: 2024-10-08 19:13:57

Spring核心(ioc控制反转)的相关文章

Spring之ioc控制反转(依赖注入)

个人感觉依赖注入比控制反转更好理解,所以下面就只说依赖注入: spring的整体结构示意图: 一.spring 中的概念 beanFactory容器 1.容器是spring框架的核心,容器使用ioc依赖注入来管理所有组成应用系统的组件. 2.spring中的两种容器: beanFactory  这个容器提供了基础的依赖注入支持,而且是延迟加载的,而 applicationcontext是对beanFactory 这个容器的扩展, 3.beanFactory :beanFactory就是一个Bea

[转]Java Spring的Ioc控制反转Java反射原理

转自:http://www.kokojia.com/article/12598.html 学习一个东西的时候,如果想弄明白,最好想想框架内部是如何实现的,如果是我做我会怎么实现.下面我就写一个Ioc DI的程序.Spring就相当于一个Bean工厂,你写好自己的bean,输入配置文件,Spring就可以帮你自动生成bean对象.下面我们创建一个java工程SimulateIoc 我们先写二个Bean.内容都一样,只是类名不一样.定义一个Spring配置文件,我们起名字叫IocConfig.xml

Spring之IOC/DI(反转控制/依赖注入)_入门Demo

软件152 刘安民 在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用

Spring 框架学习—控制反转(IOC)

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,主要用于降低模块之间耦合度的框 架,实际上Spring除了能够通过IoC降低模块之间的耦合度外还提供了其它功能. 1.IoC的基础知识以及原理: IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终 实现

Spring详解(二)------IOC控制反转

我相信提到 Spring,很多人会脱口而出IOC(控制反转).DI(依赖注入).AOP等等概念,这些概念也是面试官经常问到的知识点.那么这篇博客我们就来详细的讲解 IOC控制反转. ps:本篇博客源码下载链接:http://pan.baidu.com/s/1miwZIf2 密码:oquc 1.什么是 IOC? IOC-Inversion of Control,即控制反转.它不是什么技术,而是一种设计思想. 传统的创建对象的方法是直接通过 new 关键字,而 spring 则是通过 IOC 容器来

Spring框架中IoC(控制反转)的原理

一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑.即软件系统中对象之间的耦合,对象A和对象B之间有关联,对象B又和对象C有依赖关系,这样对象和对象之间有着复杂的依赖关系,所以才有了控制反转这个理论. 2.什么是控制反转(IoC): (1).IoC是Inversion of Control的缩写,有的翻译成"控制反转",还有翻译成为"控制反向"或者&

Helloworld之Spring依赖注入/控制反转(DI/IoC)版

Helloworld之Spring依赖注入/控制反转(DI/IoC)版 作者:雨水, 日期:2014-10-29 摘要:本文主要用于培训初学者理解Spring中的依赖注入的基本概念. 先介绍依赖注入的基本概念,然后以构造器注入为例实现了Helloworld实例. Spring依赖注入/控制反转 在我们通常的编程中,如果类A要依赖类B,通常是由A来创建一个B的实例.而Spring将创建B的实例的工作交给Spring容器来完成,然后注入A,因此称为依赖注入(DI, Dependency Inject

Spring中的Ioc控制反转与DI注入

Spring的控制反转 1.spring的介绍 spring是一款很受欢迎的java开源框架,核心全程围绕着BeanFactory展开,构成如下图. 2.IOC控制反转 2.1定义:把对象创建交给spring管理,不用new的方法,也不用工厂模式 2.2原理:1.xml配置文件,2.dom4j解析xml,3.工厂设计模式,4.反射 2.3使用:1.配置文件方式,2.注解方式 3.IOC注入bean管理  3.1.1 xml配置方式 1.就是xml配置文件中的spring创建对象的方式,也就是be

Spring学习之Ioc控制反转(1)

开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------------------------------开始啦啦啦啦啦------------------------------------------------------------------------------- 从开始接触spring起,听到最多的就是Ioc(控制反转)和AOP(面向切面编程

Spring学习之Ioc控制反转(2)

开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------------------------------开始啦啦啦啦啦------------------------------------------------------------------------------- 上一篇博文简单的演示了如何用Spring框架创建bean,注入bean,并使用到