这篇文章主要涉及的内容是依赖注入框架,或者叫依赖注入容器,简称DI容器。

工厂模式和 DI 容器的区别

DI 容器底层最基本的设计思路就是基于工厂模式的。DI 容器相当于一个大的工厂 类,负责在程序启动的时候,根据配置(要创建哪些类对象,每个类对象的创建需要依赖哪 些其他类对象)事先创建好对象。当应用程序需要使用某个类对象的时候,直接从容器中获取即可。

一个工厂类只负责某个对象或者某一组相关类的创建,而DI容器负责的是整个应用中所有类对象的创建。

DI 容器的核心功能

一般有三个:配置解析、对象创建和对象生命周期管理。

配置解析

工厂类要创建哪个对象都是写死的,属于事先定义好的,但是DI容器并不知道应用会创建哪个对象,与不可能全部写死。

我们将需要由 DI 容器来创建的类对象和创建类对象的必要信息(使用哪个构造函数以及对 应的构造函数参数都是什么等等),放到配置文件中。容器读取配置文件,根据配置文件提供的信息来创建对象。

DI容器通过解析这些配置文件,来得知具体创建哪些对象。

对象创建

在 DI 容器中,如果我们给每个类都对应创建一个工厂类,那项目中类的个数会成倍增加,我们只需要将所有类对象的创建都放到 一个工厂类中完成就可以了,比如 BeansFactory。

而通过反射,我们可以保证BeansFactory中的代码并不会根据创建对象的增加而增多,不管是创建一个对象还是十个对象, BeansFactory 工厂类代码都是一样的。

生命周期管理

参考

《设计模式之美》