简介
spring容器是spring框架的核心。容器将创建对象,将他们连接在一起,配置他们,并管理他们的整个生命周期从创建到销毁。Spring容器使用依赖注入(DI)来管理组成一个医用程序的组件。这些对象被称为Spring Beans。
IOC:控制反转
通俗的理解:以前使用对象都是通过new的形式,用到那个依赖那个,通过当前对象去调用,耦合严重;现如今是全部一次性加载实例化出来,所有的对象都交由spring容器去管理,即IOC容器去管理,不用我们自己去关心这些依赖的东西。
DI:依赖注入
通俗的理解:通过IOC控制反转的方式将所有的Bean对象加载初始化之后,由于对象之间存在依赖、调用,而依赖注入的左右就是将当前的各个依赖注入到对象中去。
依赖注入是spring容器中创建对象时给其设置依赖对象的方式,比如给spring一个清单,清单中列出了需要创建B对象以及其他的一些对象,此时spring在创建对象的时候,会看对象需要依赖于哪些对象,然后去查找一下清单中有没有包含这些被依赖的对象,如果有就去将其创建好,然后将其传递给对象;可能需要依赖于很多对象,创建之前完全不需要知道其他对象是否存在或者其他对象在哪里以及被他们是如何创建,而spring容器会将依赖对象主动创建好并将其注入进去。
IOC容器是具有依赖注入功能的容器,负责对象的实例化、对象的初始化,对象和对象之间依赖关系配置、对象的销毁、对外提供对象的查找等操作,对象的整个生命周期都是由容器来控制。我们需要使用的对象都由ioc容器进行管理,不需要我们再去手动通过new的方式去创建对象,由ioc容器直接帮我们组装好,当我们需要使用的时候直接从ioc容器中直接获取就可以了。
那么spring ioc容器是如何知道需要管理哪些对象呢?
需要我们给ioc容器提供一个配置清单,这个配置支持xml格式和java注解的方式,在配置文件中列出需要让ioc容器管理的对象,以及可以指定让ioc容器如何构建这些对象,当spring容器启动的时候,就会去加载这个配置文件,然后将这些对象给组装好以供外部访问者使用。
Bean概念:
由spring容器管理的对象统称为Bean对象。Bean就是普通的java对象,和我们自己new的对象其实是一样的,只是这些对象是由spring去创建和管理的,我们需要在配置文件中告诉spring容器需要创建哪些bean对象,所以需要先在配置文件中定义好需要创建的bean对象,这些配置统称为bean定义配置元数据信息,spring容器通过读取这些bean配置元数据信息来构建和组装我们需要的对象。
Bean 定义
被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的。bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象。这些 bean 是由用容器提供的配置元数据创建的,在 XML 的表单中的 定义。
Spring配置元数据:
SpringIOC 容器完全由实际编写的配置的元数据的格式解耦。把配置元数据提供给Spring容器主要有以下三种方法:
- 基于XML文件的配置文件
- 基于注解的配置
- 基于Java的配置
什么是DI:
理解DI的关键是:“谁依赖谁,为什么需要依赖,谁注入谁,注入了什么”,那我们来深入分析一下:
- 谁依赖于谁:当然是应用程序依赖于IoC容器;
- 为什么需要依赖:应用程序需要IoC容器来提供对象需要的外部资源;
- 谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
- 注入了什么:就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)。
总结:
-
IOC控制反转,是一种设计理念,将对象创建和组装的主动控制权利交给了spring容器去做,控制的动作被反转了,降低了系统的耦合度,利于系统维护和扩展,主要就是指需要使用的对象的组装控制权被反转了,之前是自己要做的,现在交给spring容器做了。
-
DI依赖注入,表示spring容器中创建对象时给其设置依赖对象的方式,通过某些注入方式可以让系统更灵活,比如自动注入等可以让系统变的很灵活,这个后面的文章会细说。
-
spring容器:主要负责容器中对象的创建、组装、对象查找、对象生命周期的管理等等操作。
控制反转是目的,依赖注入是手段