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中时,错误不easy暴露。推迟到执行期才干发现。
但相对于IoC提高的维护性和灵活性来说,这点缺点又显得微不足道
写到最后,忽然想到《走遍美国》里。唱片公司制片在rebaca录制完唱片后对她说的一句话:Don't call us,we'll call you
用这句话来形容IoC再合适只是。
Spring核心(ioc控制反转)的更多相关文章
- Spring框架系列(3) - 深入浅出Spring核心之控制反转(IOC)
在Spring基础 - Spring简单例子引入Spring的核心中向你展示了IoC的基础含义,同时以此发散了一些IoC相关知识点; 本节将在此基础上进一步解读IOC的含义以及IOC的使用方式.@pd ...
- Spring-初识Spring框架-IOC控制反转(DI依赖注入)
---恢复内容开始--- IOC :控制反转 (DI:依赖注入)使用ioc模式开发 实体类必须有无参构造方法1.搭建Spring环境下载jarhttp://maven.springframework. ...
- Spring 01: Spring配置 + IOC控制反转 + Setter注入
简介 Spring框架是一个容器,是整合其他框架的框架 他的核心是IOC(控制反转)和AOP(面向切面编程),由20多个模块构成,在很多领域都提供了优秀的问题解决方案 特点 轻量级:由20多个模块构成 ...
- Spring的IOC控制反转和依赖注入-重点-spring核心之一
IoC:Inverse of Control(控制反转): 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,好比于MVC.就是将原本在程序中手动创建对象的控制权,交由S ...
- Spring 04: IOC控制反转 + DI依赖注入
Spring中的IOC 一种思想,两种实现方式 IOC (Inversion of Control):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入 核心业务:(a)对象的创建 ...
- 三大框架 之 Spring(IOC控制反转、DI依赖注入)
目录 常用词汇 left join与left outer join的区别 Struts2的标签库导入 Spring Spring概述 什么是Spring spring特点 下载 IOC 什么IOC 传 ...
- [转]Java Spring的Ioc控制反转Java反射原理
转自:http://www.kokojia.com/article/12598.html 学习一个东西的时候,如果想弄明白,最好想想框架内部是如何实现的,如果是我做我会怎么实现.下面我就写一个Ioc ...
- Spring之IOC/DI(反转控制/依赖注入)_入门Demo
在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...
- [转帖]什么是IOC(控制反转)、DI(依赖注入)
什么是IOC(控制反转).DI(依赖注入) 2018-08-22 21:29:13 Ming339456 阅读数 20642 原文地址(摘要了部分内容):https://blog.csdn.net ...
- 回顾Spirng ioc 控制反转
Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的.结合网上对Spring Ioc的理解,回顾一下自 ...
随机推荐
- NuGet之控制台管理程序包
NuGet作为VS的扩展程序,已经做好了UI,我们可以通过Manage NuGet Packages 的对话框.这里我们主要说说如何通过控制台进行包管理.使用命令行的方式,其实也是有其好处,对 ...
- poj1236 Tarjan算法模板 详解
思想: 做一遍DFS,用dfn[i]表示编号为i的节点在DFS过程中的访问序号(也可以叫做开始时间)用low[i]表示i节点DFS过程中i的下方节点所能到达的开始时间最早的节点的开始时间.初始时dfn ...
- POJ 2051 Argus
Argus Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8782 Accepted: 3985 Description ...
- cronolog切割apache和tomcat日志
cronolog切割apache和tomcat日志 http://cronolog.org tar zxvf cronolog-1.6.2.tar.gzcd cronolog-1.6.2./confi ...
- Welcome-to-Swift-09类和结构体(Classes and Structures)
类和结构体是人们构建代码所用的一种通用且灵活的构造体.为了在类和结构体中实现各种功能,我们必须要严格按照对于常量,变量以及函数所规定的语法规则来定义属性和添加方法. 与其他编程语言所不同的是,Swif ...
- 【bzoj1907】树的路径覆盖 树形dp
题目描述 输入 输出 样例输入 1 7 1 2 2 3 2 4 4 6 5 6 6 7 样例输出 3 题解 树形dp 设f[x]表示以x为根的子树完成路径覆盖,且x为某条路径的一端(可以向上延伸)的最 ...
- python学习笔记--python编程基础
一.一个隆重的仪式 我们在学习语言的时候,第一个写的程序肯定都是hello world.来写第一个程序吧,其实很简单,python的语法就是简单.优雅,一个print就搞定. 1 print('hel ...
- 二进制<1>
Matrix67:位运算简介及实用技巧(一) 基础篇 什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.比如,and运 ...
- Linux环境CentOS6.9安装配置Elasticsearch6.2.2最全详细教程
Linux环境CentOS6.9安装配置Elasticsearch6.2.2最全详细教程 前言 第一步:下载Elasticsearch6.2.2 第二步:创建应用程序目录 第四步:创建Elastics ...
- 关于在IE下面promise兼容的解决办法
下载es6-promise就可以解决这个问题 import ES6Promise from "es6-promise" if(!window.Promise) { console. ...