Spring控制反转(依赖注入)的最简单说明
1.常规方式实现实例化
1.1已有角色如下:
一个接口Interface,两个接口实现类InstatnceA、InstanceB,一个调用类User
1.2当前实例化InstanceA如下:
Interface interface = new InstanceA(); #User类中的实例化代码
1.3欲修改如下:
现在想把实例化对象改为InstatnceB而不要实例化InstanceA
1.4代码修改如下:
Interface interface = new InstanceB(); #修改后的User类中的实例化代码,由InstanceA修改为了InstanceB
1.5总结:
User控制实例化哪个类(是实例化InstanceA还是InstanceB);当我们想修改实例化的类时必须去修改User中的代码。
2,.控制反转实现实例化
2.1已有角色如下:
一个接口Interface,两个接口实现类InstatnceA、InstanceB,一个调用类User,还有一个bean.xml(其维护一个Instance的id与InstanceA和InstanceB的对应关系)
2.2当前实例化InstanceA如下:
Interface interface = new Instance(); #User类中的实例化代码
<bean id="Instance" class="com.test.core.InstanceA"></bean> #bean中的映射关系
2.3欲修改如下(和1.3一样):
现在想把实例化对象改为InstatnceB而不要实例化InstanceA
2.4代码修改如下:
Interface interface = Instance(); #User类中的实例化代码,并不需要修改
<bean id="Instance" class="com.test.core.InstanceB"></bean> #对应关系为Instance--InstanceA变更为instance--InstanceB
2.5总结
spring控制实例化哪个类(是实例化InstanceA还是InstanceB);当我们想修改实例化的类时只要去修改bean.xml中的映射关系,而不用去User修改代码
3.依赖注入
User要实例化一个对像就需要一个类(InstatnceA或InstanceB)这就是一种依赖,控制反转后真正依赖的类(即要实例化的类)由beans.xml注入到User类。
依赖注入就是控制反转的别名,依赖注入侧重描述目地控制反转侧重描述现像(所以有时会见到依赖注入比控制反转给为准确的说法)。
4. MVC、IOC和ORM
SSH框架是Java Web的基石,而其中Struts核心概念是MVC、Spring的核心概念是IOC和Hibernate的核心概念是ORM,围绕这六个(或者叫三个)名词诞生了一本又一本让人看到想放弃的Java Web书藉。
其实抛开配置等细节问题仅从思想角度来看,MVC、IOC和ORM就是一回事,其本质都是将原本的“A调用B”模式解耦为“A通过xml调用B”的模式,以降低A和B强耦合导致的牵一发而动全身的问题(就是A或B修改后,工程中所有B或A的代码都要修改)。
另外,SSH可能会死(被别的框架取代),但是MVC、IOC和ORM永远不会死;但又反过来说到别的框架上MVC、IOC和ORM道理还是一样的不过换个xml文件罢了。
框架 | 核心概念 | A | xml | B | xml作用 |
Struts | MVC | 前端web页面 | struts.xml | 后端表单处理类 | struts.xml控制了前端页面实际会被推送到的类,当A/B有修改一般对此xml稍作调整即可 |
Spring | IOC | new class的代码 | beam.xml | class本身 | beam.xml控制了new class会真正被实例化的类,当A/B有修改一般对此xml稍作调整即可 |
Hibernate | ORM | 类 | table.hbm.xml | 数据库表 | table.hbm.xml控制了类属性与数据表的列的对应关系,当A/B有修改一般对此xml稍作调整即可 |
参考:
https://www.cnblogs.com/whgk/p/6074930.html
Spring控制反转(依赖注入)的最简单说明的更多相关文章
- Spring IOC - 控制反转(依赖注入) - 入门案例 - 获取对象的方式 - 别名标签
1. IOC - 控制反转(依赖注入) 所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程交 由Spring框架来处理,从此在开发过程中不再需要关注对象的创建和生命周 ...
- 玩转Spring MVC (一)---控制反转(依赖注入)
Spring的核心是控制反转,什么是控制反转呢?小编浅述一下自己的拙见,有不当之处还希望大家指出. 控制反转(IOC),也可以叫做依赖注入(DI),这两个词其实是一个概念. 控制反转,那是什么控制被反 ...
- Spring框架使用(控制反转,依赖注入,面向切面AOP)
参见:http://blog.csdn.net/fei641327936/article/details/52015121 Mybatis: 实现IOC的轻量级的一个Bean的容器 Inversion ...
- 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory
spring Ioc依赖注入控制反转 事实上这个东西很好理解的,并非那么的复杂. 当某个Java对象,须要调用还有一个Java对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...
- 控制反转&依赖注入
IoC(Inversion of Control,控制反转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系.这是什么 ...
- [PHP] 控制反转依赖注入的日常使用
控制反转:控制权交给了自己的类 依赖注入:依赖另一个类,我没有手动去new它 <?php /*我自己要用的类*/ class User { private $name; private $age ...
- C#扫盲篇(二)依赖倒置•控制反转•依赖注入•面向接口编程--满腹经纶的说
扫盲系列的文章收到了广大粉丝朋友的支持,十分感谢,你们的支持就是我最大动力. 我的扫盲系列还会继续输出,本人也是一线码农,有什么问题大家可以一起讨论.也可以私信或者留言您想要了解的知识点,我们一起进步 ...
- 控制反转 依赖注入 main函数
通过依赖注入.服务定位实现控制反转 Go kit - Frequently asked questions https://gokit.io/faq/ Dependency Injection - W ...
- Spring IOC - 控制反转(依赖注入) - 单例和多例
Spring容器管理的bean在默认情况下是单例的,即一个bean只会创建一个对象,存在map中,之后无论获取多少次该bean,都返回同一个对象. Spring默认采用单例方式,减少了对象的创建,从而 ...
- Spring IOC - 控制反转(依赖注入) - 配置初始化和销毁的方法
在Spring中如果某个bean在初始化之后,或销毁之前要做一些额外操作可以为该bean配置初始化和销毁的我方法,在这些方法中完成需要的功能. 实验: 通过断点调试模式,测试初始化方法和销毁方法的执行 ...
随机推荐
- React native 开发如何使用阿里的icon
首先是通过Text来引用的 但是区分是 familay <Text style={{fontFamily:'iconfont', fontSize:fontsize, color:this.st ...
- 二: vue的属性及功能,axios
一: 过滤器 1. 定义: 过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中. 定义过滤器的方式有两种. 2.使用vue.filter()进行全局定义 ...
- servlet中为什么doGet方法没有被调用的一种可能(笔记)
创建了一个servlet,然后在doGet()方法内写一些简单的测试语句,但是在实际运行中发现并没有调用到doGet()方法,后来发现自己在创建servlet是将service()方法也勾选上去了,而 ...
- Object_C 与JavaScript交互使用总结
iOS开发中oc与js交互的方式有很多,我们可以使用流行的第三方库如:WebviewJavaScriptBridge和OVGap,这两个库都是让webview与JS建立起一条桥梁,我们也可以使用iOS ...
- Unity中利用光线投射实现摄像机拉近追踪对象
项目中要求实现摄像机跟踪人物移动,并且可以水平360°,上下接近180°的自由旋转.这些操作网上已近有很多版本的实现,在此不再赘述.我在此想说的是,当摄像机移动到场景边界,或者触碰到场景中的障碍物的时 ...
- Python全栈开发-Day1-Python基础1
目录 Python介绍 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语句 表达式f ...
- 关于nodejs访问mysql的思考
nodejs要访问mysql数据库,首先必须要安装包mysql,命令:npm install mysql.安装成功后的访问数据库代码如下: var mysql = require('mysql'); ...
- VIM编辑器和VI编辑器的区别
vi 和vim 的区别 写在前面:这个两个"东西"着实让我烦恼一阵子,但是自己一直没当回事,但是遇到了好几次再决定彻底把他们搞的明白,一下是我通过查找资料了解到的关于这两个编辑器的 ...
- mq/mysql/redis/nginx常见服务&工具安装
单机版 3.1安装工具 3.1.1 安装Maven工具 3.1.1上传安装包 1)root用户创建安装目录如/usr/local /maven: mkdir -p /usr/local/maven ...
- Hypergeometric distribution
How TermFinder calculates P-values Readme: MGI GO Term Finder The GoTermFinder attempts to determine ...