《Spring揭秘》学习笔记——IOC是什么

Spring揭秘是本很老的书了,京东上想买正版书都买不到了,毕竟Spring迭代那么多版,估计文章内的很多代码都不适用了。
但是在Spring系列中,这本书评分是最高的,年初疫情期间趁着工作量不大把他看完了,现在希望能结合工作项目所用的Spring框架,复习一下并来看看该框架的实际变化。
在这里插入图片描述

IoC是随着近年来轻量级容器(Lightweight Container)的兴起而逐渐被很多人提起的一个名词,它 的全称为Inversion of Control,中文通常翻译为“控制反转”,它还有一个别名叫做依赖注入(Dependency Injection)

本质上就是:
如果某个Java对象里有一些成员
那么尽量不要把这些成员写死(例如某个成员的类型是A, 不要写死成A=new A1()或者A=new A2())
而要通过 构造器 或者get、set来注入进来

换句话说,在这个对象的实现中,我们看不到成员对象的具体赋值, 一切都通过外部来决定恒成员是什么

而在Spring里,这个构造器和get、set都通过IOC SerivceProvider来提供
这个图很经典
在这里插入图片描述

3种注入方式:

  • 构造方法注入:Ioc用构造方法去注入。
    好处是一旦构造好了,就可以马上用。 而且只需要对应类名和参数列表。缺点是参数多的话会很麻烦。

  • setter方法注入: Ioc用setXXX去注入成员。
    良好。易扩展。通过set去设置成员。

  • 接口注入: 必须要实现接口,然后接口里方法的参数为真正传入的成员对象。这个方式不提倡,有侵入性,一旦新增,其他全要开

接口注入看了好几遍才想明白是啥意思,换个通俗易懂的解释:

  • 构造方法注入: Ioc只要知道类名和构造参数, 即可给你用反射传进去,。
  • set方法注入: Ioc只要类名和你有哪些成员, 即可写反射的代码给你注入,都是setXXX,处理方式不会有变动。
  • 接口方注入: Ioc 必须知道你有哪些注入接口,才能给你注入。 比如你用Init(A a)来注入, 于是Ioc必须也指定init这个方法, 再加参数,才给给你注入
    明显接口注入,如果init方法改名了,可能会造成大面积的注入修改(因为其他地方可能都用了Init去构造了,然后爆炸)
    而构造和set方式几乎都是相同的注入操作,只要改入参和类名即可。

例子:
IOC ServiceProvider
在这里插入图片描述

就是如何相当于服务员
对于业务类,不需要知道自己的成员具体是谁
而如何确定自己的真正成员,来自于IOC SeviceProverdier

。它可以是一段代码,也可以是一组相关的类,甚至可以是比较通用的IoC框架或 者IoC容器实现
。Spring 的IoC容器就是一个提供依赖注入服务的IoC Service Provider

IOCSP的职责:
业务对象的构建管理,即怎么创建依赖对象
业务对象间 的依赖绑定, 即怎么确定谁依赖谁。

IOCSP的管理方式:
1.
直接编码,例如写1个map来做 类->具体子类的对应关系。然后在写map.put. get之类的代码来自己主动注入
2.
文本文件(xml、配置文件),然后自己去getXMl或者getPropetris解析
3.
注解, 相当于不用自己写map的put、get, 而是通过某个框架的注解,确定注入方式,然后去在那个框架对应的代码或者配置文件中写就行了。 其实就是1、2的升级版,不用自己去做解析和存储操作,你只要去框架那里写对应依赖关系即可。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页