【颗粒归仓】--spring IoC容器

  IoC容器是Spring技术的一个核心,Spring的很多实现技术都是交给IoC容器进行管理和实现的。所以,作为一个资深的java工程师,熟悉IoC容器的实现原理和过程是必备的技能。


  基本概念:

    就是具有依赖注入功能的容器,是可以创建对象的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。这个建立过程就是我们常说的控制反转,将对象的创建反转给容器进行实现。

  主要类型:

    IoC容器有两个主要的容器系列:一种是实现了BeanFactory接口的简单容器系列,实现了容器的基本功能;另一种是ApplicationContext应用上下文,是容器的高级形态。

    ApplicationContext在BeanFactory的基础之上添加了一些附加功能,使得ApplicationContext具备如下特性:

     1、支持不同的信息源,ApplicationContext扩展了MessageSource接口,可以支持国际化的体现
     2、访问资源:体现在对ResourceLoader和Resource的支持上,可以从不同地方得到Bean定义资源
     3、支持应用事件:继承了ApplicationEventPublisher,在上下文中引入了事件机制。
     4、提供了附加功能,与BeanFactory相比,对它的使用是面向框架的风格


  实现过程:

    IoC的实现过程可以分为两大部分,第一是容器初始化,第二部分是依赖注入。

    初始化:由refresh方法启动,标志着IoC容器正式启动。包括BeanDefinition的Resource定位、载入和注册三个基本过程。

    说到这,我们首先要明确BeanDefinition的概念,就是对依赖反转模式中管理的对象依赖关系的数据抽象,也是容器实现依赖反转功能的核心数据结构,依赖反转功能都是围绕BeanDefinition的处理来完成的

       1、Resource定位,指的是BeanDefinition的资源定位,由ResourceLoader通过统一的Resource接口来完成。其实就是容器寻找要加载的数据。例如,常用的加载资源文件的方法,使用如下代码:      

Resource resource = new ClassPathResource("beanFactoryTest.xml");
       2、BeanDefinition的载入,把用户定义好的Bean表示成IoC容器内部的数据结构,其实就是BeanDefinition。

       3、将BeanDefinition注册到IoC容器,需要使用BeanDefinitionRegistry接口来实现。在IoC容器内部将Beandefinition注入到一个HashMap中,然后从该HashMap中取所需的数据。

    依赖注入:

       经过初始化完成之后,IoC容器中已经创建好BeanDefinition的数据映射,接下来就是依赖注入。依赖注入发生在用户第一次从容器中去Bean时触发,即用户在使用getBean方法获取Bean时。


原文地址:https://www.cnblogs.com/victor-grace/p/7253619.html