Spring IOC 理解

Spring IOC 作为 Spring 核心的一部分,其翻译是 Inversion of Control (反转控制)

IOC 容器

其核心是将 对象 交给 IOC 容器来管理,这样一来对象的控制权由 开发者 反转到了 IOC 容器。什么是 IOC 容器呢?容器顾名思义是存储东西的器件 ,如一杯水的杯子就是一个容器,C++ STL模板里的队列、栈也是容器,只不过前者是用来存储水这种液体,后者是用来存储基本数据或者数据结构。而 IOC 容器 就是为了 存储 那些控制权被反转的对象。

反转的是什么

对象本身不是反转,反转的是对象资源的注入方式,以及对象资源的获取方式 (所以说是控制反转),当然还会有生命周期的一些控制。

对比

拿通俗易懂的话来说,以吃饭 (把食物看作对象)为例子,传统方式的获取对象就像是自己在家做饭烹饪,你需要选购食材、加工食材、烹饪 ,最后才能吃到食物,过程是漫长的,麻烦的。而Spring提供的 IOC 控制反转的方式 就是 点外卖 ,相当于有餐厅 这样一个资源中介者 为我们选购食材、加工食材、烹饪,我们只需要坐等美味即可。这是一种资源集中管理的思想。

传统方式:

IOC控制反转:

什么是DI

依赖注入Dependency Injection,是控制反转的一种具体实现。我们都知道一个类 (资源)的对象是有属性或者其他的依赖关系的,在传统的创建对象方法中,我们通常使用构造器或者set方法来为对象赋值或建立联系。当将控制权转交给IOC容器后,想要达到同样的目的我们就要进行依赖注入,在Spring中只需要配置好bean就可以指定目标所需要的资源,Spring就会自动为我们注入。虽然看起来很高级,但底层Spring也是使用的set方法和构造器。

谈谈IOC的作用

说了这么久IOC,它到底比起传统的方法好在哪呢?传统的创建对象的方式是需要写在一个类里面的,那么这个类就依赖于了另一个类,很明显代码的耦合增加了,如果想要修改所依赖的类就需要去源码重新new一个对象,使用IOC就只需要修改获取资源的类型。

其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

在生活中也是,如果有一个集中管理资源的中介者,能够帮助管理所有资源,那么我们只需要在需要的时后向中介者索取,而不是时刻想着怎么同时管理所有资源。

张开涛Spring ioc 理解

超细致Spring IOC理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. spring 1.1 【第二章】 IoC 之 2.3 IoC的配置使用——跟我学Spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 【第二章】 IoC 之 2.1 IoC基础 ——跟我学Spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.3 【第二章】 IoC 之 2.2 IoC 容器基本原理 ——跟我学Spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.4 【第三章】 DI 之 3.1 DI的配置使用 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.5 【第三章】 DI 之 3.2 循环依赖 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 1.6 【第三章】 DI 之 3.1 DI的配置使用 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 1.7 【第三章】 DI 之 3.2 循环依赖 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 1.8 【第三章】 DI 之 3.3 更多DI的知识 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 1.9 【第三章】 DI 之 3.4 Bean的作用域 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121 1.10 »Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了) . . . . . . . . . . . . . .132 1.11 【第四章】 资源 之 4.1 基础知识 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 1.12 【第四章】 资源 之 4.2 内置Resource实现 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . .156 1.13 【第四章】 资源 之 4.3 访问Resource ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 1.14 【第四章】 资源 之 4.4 Resource通配符路径 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . .171 1.15 【第五章】Spring表达式语言 之 5.1 概述 5.2 SpEL基础 ——跟我学spring3 . . . . . . . . . . . . . . .177 1.16 【第五章】Spring表达式语言 之 5.3 SpEL语法 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . .183 1.17 【第五章】Spring表达式语言 之 5.4在Bean定义中使用EL—跟我学spring3 . . . . . . . . . . . . . . . .197 1.18 【第六章】 AOP 之 6.1 AOP基础 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202 1.19 【第六章】 AOP 之 6.2 AOP的HelloWorld ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . .2

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值