Spring IOC原理(初级版)

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。

------------------------------------------------------------↑ 以上都是废话,我也不懂 ↑   ↓ 下面是整体架构,可以略过 ↓ --------------------------------------------------------

整体框架:

Spring框架式一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式。

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

核心容器(下面几个模块与本文无关,可以暂时不用看):核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。 
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

------------------------------------------------------------↑上面是介绍,我也不懂↑,↓ 下面是IOC ↓ ----------------------------------------------------------------------------

核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

本文介绍的IOC,如上所言,是spring核心模块的核心原理。

IOC产生的背景

脑补一下这样的场景,应该会经常遇到:当A、B、C类需要E类对象来协作完成一件事情的时候,传统做法:直接在A、B、C类中分别new一个E类对象。突然某一天,发现A\B\C类不再需要E对象来协作了,需要F对象。这是你该怎么办?只有一个办法,你需要修改A、B、C类的源代码,将E换成F,突然某一天,又改成G了,啥都不说了,改吧。突然某一天、突然某一天、突然某一天.....妈蛋!老子不干了!(当然说的夸张了点)这就是耦合。

如何解耦合呢?我们自然而然想到了接口,如果能弄一个接口,让所有的E\F\G....类都是这个接口的实现该多好啊。虽然从接口的实现来看是不太可能了。直到Michael Mattson提出了IOC,散播福音啊。

什么是IOC

上文背景中介绍到当A类需要E类对象来协作时,传统做法是自己new一个E类,这时候,控制权在你手里。IOC什么意思呢?Inversion of Control!控制反转!即:控制权反转到了其他地方。至于什么地方,一会儿再说。至少,你说了不算了。用参考资料2中的一个很有意思的事情,当你想谈恋爱的时候(需要一个异性协作,当然,也可能是同性),传统做法是:我自己去找一个女朋友\男朋友,主动权在我手里(你别说妹子不答应啊,我呼死你)。IOC的做法是:当你说你想找个人谈恋爱,你说我想要一个完美的妹子,比如长得像刘亦菲,身材像林志玲,唱歌像孙燕姿,速度像卡洛斯,技术像梅西blahblah,有个人直接送给你一个,这个人可能是你父母,也可能是婚介所。反正不是你。明白了吧。控制权反转到了人家的手里了,人家塞给你谁就是谁,爱要不要。当然,你觉得不符合要求,不满意,可以对他们说“尼玛,这是凤姐”(抛出异常)。按照IOC的做法:你能做的,只能是到婚介所或者父母(Spring容器)那里,告诉对方,你是谁,想要什么样的妹子,然后spring登记了你的信息,并在你需要的时候给你想要的。这时候,控制权其实在spring容器手里,所有类的创建,销毁都是由spring控制,而不再由你(引用它的对象)来操心了。明白了吗?控制权反转到了spring容器手里了。

参考资料:http://blog.csdn.net/m13666368773/article/details/7802126

http://blog.csdn.net/it_man/article/details/4402245

Spring IOC原理(初级版),布布扣,bubuko.com

时间: 2024-12-26 01:56:21

Spring IOC原理(初级版)的相关文章

【Spring】Spring IOC原理及源码解析之scope=request、session

一.容器 1. 容器 抛出一个议点:BeanFactory是IOC容器,而ApplicationContex则是Spring容器. 什么是容器?Collection和Container这两个单词都有存放什么东西的意思,但是放在程序猿的世界,却注定是千差万别.Collection,集合,存放obj instanceof Class为true的一类对象,重点在于存放:Container,容器,可以存放各种各样的obj,但不仅仅是存放,他被称为容器,更重要的是他能管理存放对象的生命周期和依赖. 容器:

Spring——IoC原理

一.概念 IoC是Inversion of Control的缩写,有的翻译成"控制反转",还有翻译为"控制反向"或者"控制倒置". 二.什么是IoC IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式.在Spring中控制反转是Spring框架的核心,其原理是基于OO设计原则的:Don't call us,we'll call you(别来找我,我会来找你的).也就是说,所有组件都是被动的,所有的组件初始化和调用都由容器负责.组件处在一

Spring:源码解读Spring IOC原理

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

Spring:源码解读Spring IOC原理--(转载)

转自:http://www.cnblogs.com/ITtangtang/p/3978349.html 这篇文章个人觉得整理的很不错,很值得学习,为了方便自己学习和大家学习,特转载此文保留.请尊重原创~~ Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileS

Spring IOC原理解读 面试必读

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

Spring IoC原理详解

去掌握一门技术的时候,往往很多人都忽略了一点,只是一味地去写代码,原理层面的东西从来就不理会 还有就是学习的过程中,不去想为什么有了当前的写法,却有着这么一门技术可以代替它 一般来说,在写程序的时候,一个类的实例创建都是直接通过 new className(); 语法来操作.说真的, 我写程序代码都不这么去做,我只需要在程序里定义一个接口类型的属性,直接通过属性来调用接口的方法 java代码: 1 public class Girl_1 implements Girl { 2 //定义一个接口类

spring ioc原理(看完后大家可以自己写一个spring)

控制反转/依赖注入 最近,买了本Spring入门书:spring In Action .大致浏览了下感觉还不错.就是入门了点.Manning的书还是不错的,我虽然不像哪些只看Manning书的人那样专注于Manning,但怀着崇敬 的心情和激情通览了一遍.又一次接受了IOC .DI.AOP等Spring核心概念. 先就IOC和DI谈一点我的看法. IOC(DI): 其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.java程序员都知道:java程序中的每个业务逻辑至少

spring ioc原理

最近,买了本Spring入门书:spring In Action .大致浏览了下感觉还不错.就是入门了点.Manning的书还是不错的,我虽然不像哪些只看Manning书的人那样专注于Manning,但怀着崇敬的心情和激情通览了一遍.又一次接受了IOC .DI.AOP等Spring核心概念. 先就IOC和DI谈一点我的看法. IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩.java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协

自己模拟实现spring IOC原理

1.1.IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下: ●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象:而IoC是有专门一个