「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战」。
一,前言
上一篇,对 Spring 进行了简单的概述;
了解了 Spring 框架的两大核心模块:IOC容器 和 AOP;
源码分析,首先从 IOC 容器开始,之后再来看 AOP;
本篇,先来了解一下什么是 IOC 容器以及 IOC 容器的功能;
二,依赖反转
1)正常开发模式(非依赖反转)
正常的,合作对象的引用或依赖关系的管理由具体对象来完成(持有被引用的对象),
这导致了代码高度耦合并且降低了代码的可测试性
2)依赖反转,反转了什么
所谓依赖反转(控制反转),其实是依赖对象的获得被反转了,所以也被称作依赖注入
3)依赖反转的开发模式
在 Spring 框架中,IOC 容器是依赖控制反转模式实现的载体
将对象的依赖注入交给框架或IOC容器来完成,解耦代码的同时提高了代码的可测试性
三,IOC容器
4)注入方式
IOC 容器可以在对象生成或初始化时直接将数据注入到对象中;
也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖;
这种依赖注入是可递归的,对象被逐层注入;
5)使用 IOC 容器的优点
IOC 容器将对象的依赖关系有序地建立起来
简化了对象依赖关系的管理和面向对象系统的复杂性
应用控制反转后,当对象被创建时,由一个 IOC 容器将依赖对象注入到对象中
所以,控制反转是关于一个对象如何获取它锁依赖对象的引用,这里的反转指的是责任的反转
通过使用 IOC 容器,对象依赖关系的管理被反转到了IOC容器中
对象之间的相互依赖关系由IOC容器进行管理,并由IOC容器完成对象的注入
在很大程度上简化了应用的开发,把应用从复杂的对象依赖关系管理中解放出来
如果将面向对象系统中的对象进行简单的分类,会发现除了一部分是数据外,其他大多数对象时用来处理数据的这些对象并不常发生变化,是系统中的基础部分
很多情况下,这些对象在系统中以单件的行书起作用就可以满足应用的需求,且不常涉及数据和状态
IOC 容器
IOC 容器就是具有依赖注入功能的容器,是可以创建对象的容器;
IOC 容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖;
通常 new 一个实例,控制权由程序员控制;
而"控制反转"是指 new 实例工作不由程序员来做而是交给 Spring 容器来做;
在 Spring 中 BeanFactory 是 IOC 容器的实际代表者;
DI(依赖注入Dependency injection) :
在容器创建对象后,处理对象的依赖关系。