求生声明:小弟初学者,理解得不到位的地方,欢迎各位大佬斧正,必虚心改进,但也拒绝喷子和引战。
首先呈上本周学习的总体图。
目录
一、为什么要有IoC容器?
二、IoC容器系列的设计与实现:BeanFactory与ApplicationContext
三、IoC容器的初始化
四、依赖注入
五、小结
一、为什么要有IoC容器?
我觉得要回答这个问题,还得回到梦开始的地方:高内聚、低耦合。
学习JAVA基础知识,学到JAVA特性——封装,一定看到过这个思想:
向高内聚、低耦合而努力。
那如何做到高内聚呢?
封装对象。
那如何做到低耦合呢?
看新闻资讯的时候,总是有各种标题党博人眼球:
如漆似胶的两人为何会在即将迈入婚姻殿堂前不顾七年感情分道扬镳?真相竟然是......
咳咳,扯远了,回到正题,解耦合最常用的方法就是:中间件。 (这个想法是看了点书得来的,各位智者见智)
在Sping中,IoC就是两个类间的中间件,负责减少两个类间强依赖的容器。
说到这里,我想大家【说一说你对控制反转这个概念的理解】这一类面试题应该会有自己的想法了。
二、BeanFactory与ApplicationContext
ApplicationContext继承自BeanFactory,在其基础上进行了扩展,可以说ApplicationContext是BeanFactory的高级形态。
截图来自:《Spring技术内幕第2版》,关注公众号回复:学习资料(蓝奏云高手下载哟!)。
在BeanFactory里,最重要的就是BeanDefinition。
BeanDefinition抽象了对Bean的定义,
跟Bean的关系就像类和对象,用BeanDefinition来创建Bean对象。
BeanDefinition和Ioc的容器就像:水和水桶。
用IoC这个水桶来装BeanDefinition这摊水。
三、IoC容器的初始化
1、BeanDefinition的Resources定位。
这个过程类似容器寻找数据的过程,就像水桶要装水,就要先找到水源。
2、BeanDefinition的载入。
类似:将水装入水桶。
3、BeanDefinition的解析。
4、IoC容器注册BeanDefinition的过程,为什么要注册呢?
就像WX号一样,不注册一下,载入后谁知道谁是谁呢?
四、依赖注入
看完依赖注入部分,感觉很蒙圈,便去网上学习了一番,要想搞明白什么是依赖注入,我们必须先搞明白两点:1、什么人?2、做了什么事?
三个人:对象A,IoC容器、对象B
什么事?【IoC容器】将【对象A中,对象B所需要的信息(B对A的依赖)】,注入对象B。
是不是又回到了第一小节?既然对象A与对象B之间强行插入了一个中间件,那对象A和对象B间的交互怎么办呢?
交互就是IoC的责任了,IoC容器【初始化】拿到对象A的信息,对象B需要对象A的信息的时候,IoC容器又要干活了,进行【依赖注入】,将对象A的信息注入对象B。
在网上找了一个实例供大家进一步理解:
对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象。
有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。
在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。
A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。
五、小结
本周末就看了这么点,收获还是蛮大的,对IoC有了一个整体上的了解。细节的东西,实践的时候再来看吧!下周尽量把AOP部分看完,分享给大家! 《Spring技术内幕第2版》电子版在后台回复:学习资料 即可。仅供大家交流学习使用,请勿商用。
最好买纸质书籍,经济条件不允许也可以购买二手的,扫描下方二维码 ,即可到手。