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的理解,回顾一下自 ...
随机推荐
- xcode各个版本下载 xcode7 xcode6 xcode5
登录开发者帐号,选择 support,然后操作如下图: 登录开发者帐号,选择 support,然后操作如下图: 登录开发者帐号,选择 support,然后操作如下图: 登录开发者帐号,选择 suppo ...
- hexo博客发布注意事项
最近把hexo博客内容写完了,就发布到github上面去,结果就出现各种一些小问题. 1.发布之后,hexo博客的css与js无法访问. 原因:没有配置正确的url路径.(配置文件_config.ym ...
- 设计模式之工厂模式 Factory实现
simpleFactory //car接口 public interface Car { void run(); } //两个实现类 public class Audi implements Car{ ...
- 【Luogu】P3356火星探险问题(费用流)
题目链接 网络流一条边都不能多连?没道理呀? 不过单看这题的确是个sb题…… #include<cstdio> #include<algorithm> #include< ...
- 【Luogu】P2596书架(Splay)
题目链接 通过这题我加深了对Splay的理解,原来Splay的子树也是可以接来接去接到别的点上的,而不是只能旋转qwq 具体接的办法就是swap大法. 对于Top操作我们把当前节点Splay到根,然后 ...
- [转] Makefile 基础 (4) —— Makefile 书写命令
该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神博客:(最原始版本) http://blog.csdn.net/haoel/article/details/2886 我转自 ...
- 关于后台返回excel文件的问题
一般情况ajax请求只能获取解析非流文件类型,而excel是流文件类型,这个时候获取到的数据会是一串乱码的字符串 想要下载这个excel文件,通过form表单模拟的方式可以解决 var form = ...
- bzoj 3060[Poi2012]Tour de Byteotia 贪心+生成树
Description 给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上. Analysis 包含关键点的环中 包含从关键点连出的两条边 考虑我们删边删哪些边更优 根 ...
- FZOJ Problem 2150 Fire Game
...
- 应用node+express+mysql 实现简单的增删改查
记录下来备忘 1.准备好webstrom编辑器,编辑器调整字体大小等在file->settings->editor下设置 注册码 来源网上: 2017.2.27更新 选择“license ...