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控制反转(依赖注入)的最简单说明相关推荐

  1. Spring框架学习笔记(1) ---[spring框架概念 , 初步上手使用Spring , 控制反转 依赖注入初步理解 ]

    spring官网 -->spring官网 spring5.3.12–>spring-framework 在线文档 --> Spring 5.3.12 文章目录 1.Spring概论 ...

  2. Spring 的控制反转/依赖注入

    第一章 Spring 的控制反转/依赖注入 回顾 增删改查. 课前测: 本章内容 spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制.工厂模式 BeanFactory: 懒 ...

  3. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程...

    那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰--依赖倒置•控制反转•依赖注入•面向接口编程.也 ...

  4. 控制反转---依赖注入理解

    在学习Spring的时候,意外找到这个控制反转(IoC)和面向切面(AOP)的容器框架之前,我们先来看一下什么是控制反转(IoC). 控制反转(Ioc)和依赖注入(DI)刚听到感到很难理解,平时也程序 ...

  5. 设计模式——控制反转依赖注入

    一.控制反转: 从简单的代码示例入手: /// <summary>/// 邮件服务类/// </summary>public class EmailService{public ...

  6. 【C#|.NET】从控制反转(依赖注入)想到事件注入 (非AOP)

    前文 事件注入的想法是由依赖注入所联想到 依赖注入不算什么吸引人的话题 本篇就不详说了 不过有闲暇时间的机会不妨按照自己的兴趣去摸索.研究一些东西,也是一种乐子. 在抓虫系列里简单的描述一下依赖注入在 ...

  7. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程【转】...

    那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些"高深术语"感到过困扰.也许时至今日,你仍对它们一知半解.不过就在今天, ...

  8. 高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

    今天,我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些"高深术语"中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. 高聚合·低耦合 简短:管理好自己(内聚),但是有 ...

  9. 【转】那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程

    作者:在好 链接:https://www.zhihu.com/question/31021366/answer/102239756 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  10. 控制反转/依赖注入概念

    控制反转概念 控制反转是影响广泛的设计模式,其主要目的就是为了管理对象之间的关系,为对象之间解除耦合,把对象生命周期的管理和关系的管理这些和对象个体无关的公共任务交给公共容器处理. 控制反转有如下好处 ...

最新文章

  1. styleable cannot be resolved or is not a field
  2. 用哪种语言写的应用漏洞最严重?六大主流语言代码漏洞分析报告出炉
  3. nvm-windows安装和配置
  4. 和平精英为什么找不到服务器,和平精英为什么登不上去 和平精英游戏登不上原因分析...
  5. java threetable,Java XWPFDocument.createTable方法代码示例
  6. java传送字符到前端_mina实现服务器与客户端传送对象或字符串
  7. linux测试怎样看,linux入门篇:如何查看centos版本
  8. java struts2 ajax_在struts2的Action中返回Ajax数据
  9. 初识JAVA--foreach语句的应用
  10. 中芯国际能靠14nm工艺翻身么?
  11. 口语化讲某些软件如BT,电驴,向日葵等穿透内网原理
  12. At the beginning of the month, the doctor introduced in the article “iOS
  13. Spring注解@Component、@Repository、@Service、@Controll
  14. Linux 中 Iptables 规则定义
  15. (Web前端)十分优秀的后台管理框架收集
  16. form表单提交中,确定和取消效果的实现
  17. 最小二乘法及其代码实现
  18. JVM 参数学习--实际参数设置
  19. java毕业设计成都某4S店销售管理系统Mybatis+系统+数据库+调试部署
  20. 「实用」打造自我感觉非常漂亮的Mac终端

热门文章

  1. batchnorm2d参数 torch_Pytorch-nn.BatchNorm2d()
  2. kibana一直弹出来报错?
  3. 在LNMP或Nginx上配置NameCheap免费SSL证书
  4. Java web 初入
  5. PowerDesigner连接SqlServer数据库
  6. vc编程中出现 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include stdafx.h”?...
  7. 看译飞的由浅入深漫谈margin属性
  8. 涨知识!外贸中,船公司S/O(订舱单)文件英文解释!
  9. 内卷时代的晋升述职要“想明白”和“讲清楚”
  10. 百度VS谷歌?搜索质量评判也要讲基本法