Spring3.0第二讲:什么是IOC

对于IOC(Inversion of Control),很多人有不同的见解,这相当于“一千人心中有一千个哈姆雷特”,其实说来说去总是离不开“控制反转”和“依赖注入”。不要把IOC当成一种什么的很高深的技术,它只是一种概念,告诉你Spring针对程序解耦的实现方法。

首先我们来详细说一下什么叫“控制反转”,分解为两个关键词:控制和反转

①传统的JavaSE中我们如果在一个对象引入其他对象,习惯用new,这样我们就可以用这个对象资源,而IOC则是将对象创建其他对象的控制权收到自己手中,当对象需要引用其他对象时,不需要我们new,IOC容器会为你创建,即将对象新建的控制拿在手里。

②所谓new对象是属于主动的行为,那么被动的获取对象就属于被动行为,从我们自己主动创建依赖对象到由容器控制创建以及注入依赖对象,就是一种反转。

下面图片很好的反应了这个过程:

当引入IOC容器后,用户不需要去创建这些类:

知道IOC原理以后,我们需要知道Spring 的IOC带给我们怎么样的变化:

实现组件之间的解耦,提高程序的灵活性和可维护性。

但是同时:

1、创建对象的步骤变复杂了,不直观,当然这是对不习惯这种方式的人来说的。

2、因为使用反射来创建对象,所以在效率上会有些损耗。但相对于程序的灵活性和可维护性来说,这点损耗是微不足道的。

3、缺少IDE重构的支持,如果修改了类名,还需到XML文件中手动修改,这似乎是所有XML方式的缺憾所在。

其次,我们来说一下“依赖注入”(DI)。

依赖注入其实与控制反转是从不同角度来说明IOC概念,两个对象之间的依赖关系在程序运行时由外部容器动态的注入依赖行为方式称为依赖注入 (DI) 。

①如果类A需要运用类B的方法或者属性,通俗的说他们之前存在依赖关系。

②当A运行时,IOC容器会将类B注入到A中,A不需要知道B什么时候创建以及怎么构造的。

对于IOC,我们只要明白"控制反转"以及"依赖注入"中的每个字的含义就行了,它代表的只是一种设计原理,并非那么高深。

时间: 2024-11-05 14:53:59

Spring3.0第二讲:什么是IOC的相关文章

Spring3.0第一讲:Spring整体架构

首先让我们来看一下Spring框架的分层: 从上面我们大致可以知道Spring由20多个模块组成,它们之间相互独立却又相互依赖,只要我们掌握了上面的所有模块,就说明你已经掌握了学习Spring框架的主线. 整个Spring模块是建立在Core Container上的,在该容器里Beans与Core是框架的基础部分,提供Ioc和依赖注入特性,这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正的允许你从程序逻辑中分离出依赖关系和配置. C

第二讲 auto_ptr智能指针

// STL.cpp : 定义控制台应用程序的入口点. // //智能指针在其生命周期结束后会自动调用delete #include "stdafx.h" #include<iostream> #include<memory> using namespace std; class WebSite { public: WebSite(int x){i = x;cout << i << "调用构造函数" <<

Spring3.0下使用JavaMailSenderImpl类发送邮件

1.JavaMailSenderImpl类 Spring的邮件发送的核心是MailSender接口,在Spring3.0中提供了一个实现类JavaMailSenderImpl,这个类是发送邮件的核心类. 可以通过在配置文件中配置使用,当然也可以自己硬编码到代码中. 2.准备工作 搭建spring环境,此处默认学习者已搭建成功. 下载JavaMail jar包,导入工程. http://www.oracle.com/technetwork/java/javamail/index-138643.ht

spring3.0+Atomikos 构建jta的分布式事务

摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0已经不再支持jtom了,不过我们可以用第三方开源软件atomikos(http://www.atomikos.com/)来实现. Atomikos是目前在分布式事务管理中做得相当不错的开源软件.有10年以上的经验,Atomikos保障您的关键事务和 防止昂贵的数据丢失在发生系统故障或事故中.Atomikos支持XA(全局事务)和NON-XA(非全局事务),NON-XA效率高 于XA.本文主

Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子

转自:http://www.blogjava.net/wangxinsh55/archive/2011/07/24/354925.html Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8整合例子(附完整的请假流程例子,jbpm基础,常见问题解决) Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子). 1.       jbpm4.4 测试环境搭建 2.       Jbpm4

Spring3.0第三讲:Spring实现简单的登录

学习Spring这些技术性框架,光掌握理论知识是远远不够了,我们要懂得学以致用,用键盘将学到的敲出来,在正确与错误中寻找Spring的用法. 为了给读者一个直观的概念,这里我用Spring搭建一个简单的登录,可以让你很快的了解Spring在持久层.业务层.表现层是怎么运作的,这样后面我们分模块讲解的时候,读者也能很快的知道. 本文所用工具为Eclipse IDE,数据库为Oracle 11g. 首先我们来了解登录这个功能,用户访问登录页面,输入账号和密码,点击登录,后台验证是否有账号和密码匹配,

从大数据菜鸟走上大师的历程 第二讲:函数定义,流程控制,异常处理

Scala 第二讲 函数定义,流程控制,异常处理 For 循环  for(左边为单个对象obj  <-  右边为对象集合objs ) for 循环里把右边的对象赋给左边 现在正是学习大数据的最好机遇,不花一分钱就可以成为大数据高手,实现年薪50万的梦想. 王家林的第一个中国梦:免费为全社会培养100万名优秀的大数据从业人员! 如果您有兴趣请点击这个链接进入大数据的学习 http://blog.sina.com.cn/s/blog_8fbd39ee0102vto3.html 如果您确实感觉视频教程

Spring3.0 AOP 详解

一.什么是 AOP. AOP(Aspect Orient Programming),也就是面向切面编程.可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程. 二.AOP 的作用. 常常通过 AOP 来处理一些具有横切性质的系统性服务,如事物管理.安全检查.缓存.对象池管理等,AOP 已经成为一种非常常用的解决方案. 三.AOP 的实现原理. 如图:AOP 实际上是由目标类的代理类实现的.AOP 代理其实是由 AOP 框架动态生成的一个

机器学习基石第二讲:learn to answer yes/no

博客已经迁移至Marcovaldo's blog (http://marcovaldong.github.io/) 刚刚完成了机器学习基石的第二讲,主要介绍了机器学习的定义,PLA算法和pocket PLA算法.下面将笔记整理在下面. Perceptron Hypothesis Set 延续前面的信用卡发放问题.银行已有的用户数据可能包括用户的年龄.年薪.工作时长.债务情况等特征信息,我们分别用x1,x2,-,xd来表示,那么对于每一个用户都有一个向量来表示其信息.我们为每一个特征信息分配一个权