Spring源码分析笔记

Spring源码分析笔记

本文参考学习自[Spring:源码解读Spring IOC原理]

总结以下几个问题:

1.什么是IOC/DI?
2.BeanDefinition、BeanFactory、FactoryBean是什么?
3.什么是IOC容器的初始化?初始化包括哪些内容?
4.依赖注入发生的时间?

1.什么是IOC/DI?

IOC(Inversion Of Control)控制反转。所谓控制反转,就是原先我们代码里面需要实现的对象创建、依赖的代码反转给容器(也称为Spring容器IOC容器来帮忙实现。而对象与对象的关系通过配置文件(xml、properties文件 )来描述

DI(Dependency Injection)依赖注入。就是注入某个对象所需要的外部资源。可理解将对象依赖的外部资源(如其他Bean)设置给对象。

2.BeanDefinition、BeanFactory、FactoryBean是什么?

BeanDefinitionSpring IoCXML形式定义的Bean定义资源文件转换为Spring IoC所识别的数据结构——BeanDefinition。正是有了这些数据,容器才可以进行依赖注入。

BeanFactoryBean工厂,是一个Factory,Spring IoC容器的最顶层接口就是这个BeanFactory,它的作用是管理Bean,即实例化、定位、配置应用程序中对象的建立及对象间的依赖。BeanFactory作为最顶层的一个接口类,Spring中的实现了该接口的类,就可称为容器

FactoryBean工厂Bean,是一个Bean,作用是产生其他bean实例,或者说得到工厂Bean生产的Bean。可以使用转义字符“&”来得到FactoryBean本身。

3.什么是IOC容器的初始化?初始化包括哪些内容?

概述
IOC容器的初始化包括BeanDefinitionResource定位载入注册这三个基本过程。

以下对概述进行延伸总结创建IOC容器通过xml配置文件读取资源,并封装为Resource资源,将资源转换Document对象,然后解析成BeanDefinition(Bean定义信息,当依赖注入时才使用这些记录信息创建和实例化具体的Bean对象),最后向容器注册BeanDefinition(注册过程就是在 IOC 容器内部维护的一个HashMap 来保存得到的 BeanDefinition 的过程)完成IOC容器的初始化,但此时还未发生依赖注入。更多源码分析参考 [Spring:源码解读Spring IOC原理]

4.依赖注入发生的时间?

Spring IoC容器完成了Bean定义资源的定位、载入和解析注册以后(即完成IoC容器的初始化后),IoC容器中已经管理类Bean定义的相关数据,但是此时IoC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况发生

①. 用户第一次通过getBean方法向IoC容索要Bean时,IoC容器触发依赖注入

②. 当用户在Bean定义资源中为<Bean>元素配置了lazy-init属性(默认是配置了,即默认是在容器初始化完成后),即让容器在解析注册Bean定义时进行预实例化,触发依赖注入

参考:

[Spring:源码解读Spring IOC原理]

[控制反转和依赖注入的区别]

    原文作者:Spring Boot
    原文地址: https://blog.csdn.net/u010046451/article/details/79321993
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞