Spring入门之IOC
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相关推荐
- JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试
Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的Java ...
- Spring入门 IOC/DI基础案例
目录 前言 一.创建set方法让外部进行方法提供 二.配置文件 三.实际运行 前言 书接上回:Spring入门-ioc基础案例代码_年关的博客-CSDN博客 我们通过Spring方式进行了对象创建,但 ...
- spring入门第一天之IOC与DI
我们首先要学习的就是 Spring Framework , Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基 spring核心概念: IOC 控制反转,对象的创建 ...
- Spring入门介绍:
Spring入门介绍 Spring诞生: 创建Spring的目的就是用来替代更加重量级的的企业级Java技术 简化Java的开发 基于POJO轻量级和最小侵入式开发 通过依赖注入和面向接口实现松耦合 ...
- Spring入门5.事务管理机制
Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...
- Spring入门与常用配置
什么是Spring Spring:SE/EE开发的一站式框架. 一站式框架:有EE开发的每一层解决方案. WEB层 :SpringMVC Service层 :Spring的Bean管理,Spri ...
- spring入门总结
spring入门总结 一.spring介绍 1.spring是什么 2.理念: 3.Spring优点: 4.缺点 5.主要内容: 二.IOC&DI 1.使用IOC创建对象的三种方法 a.无参构 ...
- 【Spring】Spring入门
Spring 入门 Spring 全家桶 Spring Framework -- Spring 框架 , 基石 Spring Boot -- 构建项目 Spring Cloud -- 微服务 Spri ...
- Spring入门第一讲——Spring框架的快速入门
Spring的概述 什么是Spring? 我们可以从度娘上看到这样有关Spring的介绍: 说得更加详细一点,Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架, ...
- 【Spring入门】
Spring01loc&DI 概念:Spring是一种分层的Javaee.Javase应用full-stack(全栈)轻量级开源框架,以ioc(反转控制)和aop(面向切面编程为内核),提供了 ...
最新文章
- PIE SDK波段合成
- (转)MySQL 线程池内幕
- 深入浅出: Java回调机制(异步)
- 一款 APK 是怎么诞生的?
- powerbi视觉对象_玩转Power BI的图片可视化
- Ubuntu开发环境搭建
- STL之Map完整(Linux内核)内部实现
- 基于JAVA+Spring+MYSQL的婚纱摄影网站
- web 请求 编码 引发的问题
- 电子工程师私藏的一个网站
- MediaFormat api详解
- 动态控制水晶报表中数字栏位的值显示的小数位数
- 惠普微型计算机 使用教程,惠普打印机怎么用 打印机使用注意事项【图文教程】...
- 扫地机器人漫谈(一):扫地机的形状
- 游戏逆向_Android读写游戏内容
- 用计算机弹音乐乐谱小幸运,小幸运——歌词和弦版本钢琴谱
- 如何从生活中领悟设计模式
- 从一线码农到阿里技术合伙人 P11的少林扫地僧多隆,人家牛逼是种习惯
- 【西瓜书+南瓜书】学习笔记3
- iOS开发 RSA加密解密与后台之间的双向加密详解
热门文章
- 基于 Flink+Iceberg 构建企业级实时数据湖
- android BaseAdapter多布局缓存
- Android内存泄漏分析心得
- SQL 中的 in 与 not in、exists 与 not exists 的区别以及性能分析
- 程序员春节回家装逼指南
- matlab改进 otsu法,otsu算法---matlab实现,和一种改进算法
- 输电线路巡检机器人PPT_国网泰安供电公司开展输电线路无人机精细化巡检
- php alias 报错,PHP: class_alias - Manual
- mysql 分页 数据重复数据_MySQL 分页数据错乱重复
- java各版本之间的差异_Java 8-13版本功能差异一览指南 - marcobehler