IOC/DI:

Spring最核心的灵魂,IOC/DI(控制反转/依赖注入)!,这里一定要理解他,理解这个思想。我会细说什么是IOC/DI、他的思想是什么、它带来了那些好处。

进入正题,先说说什么是ioc,什么又是DI,其实ioc 与 DI 本质上是一个东西,但是他们的概念有所不同,Spring公司称之ioc,民间有部分人称它为DI。

ioc(控制反转)

什么叫控制反转,先从字面上的意思来思考,谁控制谁、控制什么、谁又反转谁、反转是什么。

                    

下面4点我会简单的说明下,如果不明白的先记住这些话,后面会慢慢的讲解

1.谁控制谁?

角色:Spring框架、应用程序(项目)

角色分别是Spring框架、应用程序,在控制反转中,是Spring框架控制着应用程序。

2.控制什么?

Spring框架控制应用程序,具体是控制应用程序的什么? 控制着应用程序对资源的管理(创建对象、对象的关系依赖、给对象属性设置字符串、文件等等,这些都称之为资源)。

3.谁反转谁?

Spring反转应用程序对资源的管理。

4.什么是反转?

什么是反转,有反转就有正转,正转是什么,我们在应用程序(项目)里面new 对象 、给对象赋值 、给对象做关系依赖(这些行为我统称对资源的管理),这些行为都叫正转,而反转就是反过来,这些事情都交给其他人去做,应用程序本身不做了,这就是反转。

把上面4点总结起来就是,Spring控制应用程序对资源的管理,这就是控制反转。

IOC思想:

Spring真正厉害的地方,是它的思想,并不是它的代码,是它这种思想改变了开发的格局,它把以前应用程序对资源的管理给分离出来,全部交给Spring ioc做,提高了开发的效率,让我们专注于业务逻辑及其他方面,不需要去管对象的创建、关系的依赖,想要什么从Spring ioc获取,同时还做到了松散耦合,比如修改对象的依赖关系,特别是对象比较多,关系也比较复杂的情况,如果还是传统的方法,都由应用程序管理资源,那么维护成本会很高,你需要修改大量的代码,降低开发效率,换成是Spring ioc来修改关系,直接在配置文件里面配置即可,应用程序几乎不需要改动代码,下面我会通过画图的形式来讲解思想的演变,你们能更深的体会我说的这些内容与它的思想。

思想的演变

思想1:

这就是正转,任何事情全部由应用程序本身操作,对象的创建、对象的关系依赖、获取外部资源、业务的逻辑,全部混在一起,如果里面的对象多,关系也复杂,维护起来,时间成本非常高,降低我们开发效率,也容易出现bug,而且每次都要重新编译。

思想2:

现在由思想1的正转变成了反转,以前由应用程序中A类做的资源管理(对象的创建、对象的关系依赖、获取外部资源),交给了对象工厂去做,所有的资源都向对象工厂获取,由之前的主动去创建对象、配置关系依赖、获取外部资源,全部变成了被动接收,对象工厂成为了主动,这些东西全是对象广场给你的,但是这样还是不方便,因为你要更换对象还是要去修改工厂CreateC()里面具体创建对象的代码,同样要重新编译。

思想3:

思想3演变成了,工厂获取XML里面配置好的类的全限定名再用反射创建对象,以后要修改对象,直接修改配置文件即,不需要改动代码,也不会重新编译,此时的关系是,应用程序A类被动接收,依赖工厂类,工厂类也变成被动接收,依赖xml配置文件,xml配置文件变成了主动,但是操作起来比较麻烦,比如带参构造器、依赖关系等等,用反射做会十分麻烦。

思想4:

            

思想4正是现在的讲的IOC,其实IOC的底层原理就是工厂+xml+反射,只不过Spring把他们全部封装的很完善,扩展了很多东西,不需要我们去做任何有关操作对象的事情,只要在XML里面配置好对象的关系即可,Spring会自动帮你创建好,应用程序尽管获取就醒了,现在的关系演变成了,应用程序被动接收,依赖Spring,Spring依赖XML配置文件,XML配置文件主动,需要改变对象修改配置文件即可,与思想3相比,少了加载xml配置文件再通过反射去创建对象的步骤,这些事情Spring全部帮你做好了。

上图的请求流程是 启动项目的时候Spring会去获取XML配置文件里面的关系,再通过反射技术把他们都实例化,并装进ioc容器内,应用程序获取的时候直接问Spring要,Spring从ioc容器中取出来给应用程序。

思想总结:

             整个思想的演变,最大的变化就是主动变被动,这是IOC最核心的思想,由应用程序主动管理这些资源演变成Spring来管理,应用程序依赖Spring来获取资源变成被动,Spring来管理这些资源变成了主动。

IOC与DI

IOC与DI讲的是同一件事情,但是角度不一样

1.应用程序角度:

应用程序依赖Spring,依赖Spring给它注入资源,这就是依赖注入DI。

2.Spring角度:

Spring控制应用程序,控制它对资源的管理,这就是控制反转IOC。

转载于:https://www.cnblogs.com/JangXiNanChangCode/p/8268327.html

Spring入门之IOC相关推荐

  1. JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

    Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring?  Spring是分层的Java ...

  2. Spring入门 IOC/DI基础案例

    目录 前言 一.创建set方法让外部进行方法提供 二.配置文件 三.实际运行 前言 书接上回:Spring入门-ioc基础案例代码_年关的博客-CSDN博客 我们通过Spring方式进行了对象创建,但 ...

  3. spring入门第一天之IOC与DI

    我们首先要学习的就是 Spring Framework , Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基 spring核心概念: IOC  控制反转,对象的创建 ...

  4. Spring入门介绍:

    Spring入门介绍 Spring诞生: 创建Spring的目的就是用来替代更加重量级的的企业级Java技术 简化Java的开发 基于POJO轻量级和最小侵入式开发 通过依赖注入和面向接口实现松耦合 ...

  5. Spring入门5.事务管理机制

    Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...

  6. Spring入门与常用配置

    什么是Spring Spring:SE/EE开发的一站式框架. 一站式框架:有EE开发的每一层解决方案.  WEB层 :SpringMVC   Service层 :Spring的Bean管理,Spri ...

  7. spring入门总结

    spring入门总结 一.spring介绍 1.spring是什么 2.理念: 3.Spring优点: 4.缺点 5.主要内容: 二.IOC&DI 1.使用IOC创建对象的三种方法 a.无参构 ...

  8. 【Spring】Spring入门

    Spring 入门 Spring 全家桶 Spring Framework -- Spring 框架 , 基石 Spring Boot -- 构建项目 Spring Cloud -- 微服务 Spri ...

  9. Spring入门第一讲——Spring框架的快速入门

    Spring的概述 什么是Spring? 我们可以从度娘上看到这样有关Spring的介绍: 说得更加详细一点,Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架, ...

  10. 【Spring入门】

    Spring01loc&DI 概念:Spring是一种分层的Javaee.Javase应用full-stack(全栈)轻量级开源框架,以ioc(反转控制)和aop(面向切面编程为内核),提供了 ...

最新文章

  1. PIE SDK波段合成
  2. (转)MySQL 线程池内幕
  3. 深入浅出: Java回调机制(异步)
  4. 一款 APK 是怎么诞生的?
  5. powerbi视觉对象_玩转Power BI的图片可视化
  6. Ubuntu开发环境搭建
  7. STL之Map完整(Linux内核)内部实现
  8. 基于JAVA+Spring+MYSQL的婚纱摄影网站
  9. web 请求 编码 引发的问题
  10. 电子工程师私藏的一个网站
  11. MediaFormat api详解
  12. 动态控制水晶报表中数字栏位的值显示的小数位数
  13. 惠普微型计算机 使用教程,惠普打印机怎么用 打印机使用注意事项【图文教程】...
  14. 扫地机器人漫谈(一):扫地机的形状
  15. 游戏逆向_Android读写游戏内容
  16. 用计算机弹音乐乐谱小幸运,小幸运——歌词和弦版本钢琴谱
  17. 如何从生活中领悟设计模式
  18. 从一线码农到阿里技术合伙人 P11的少林扫地僧多隆,人家牛逼是种习惯
  19. 【西瓜书+南瓜书】学习笔记3
  20. iOS开发 RSA加密解密与后台之间的双向加密详解

热门文章

  1. 基于 Flink+Iceberg 构建企业级实时数据湖
  2. android BaseAdapter多布局缓存
  3. Android内存泄漏分析心得
  4. SQL 中的 in 与 not in、exists 与 not exists 的区别以及性能分析
  5. 程序员春节回家装逼指南
  6. matlab改进 otsu法,otsu算法---matlab实现,和一种改进算法
  7. 输电线路巡检机器人PPT_国网泰安供电公司开展输电线路无人机精细化巡检
  8. php alias 报错,PHP: class_alias - Manual
  9. mysql 分页 数据重复数据_MySQL 分页数据错乱重复
  10. java各版本之间的差异_Java 8-13版本功能差异一览指南 - marcobehler