Spring系列开篇IOC容器体系介绍

Spring已经是成为Java EE的 '默认的规范' , 所以想凭自己对Spring的理解,来记录和分享Spring的功能特性和组件工具使用

从下面几个方面来介绍和探讨Spring

SpringIOC功能简述

Spring依赖查找和依赖注入

Spring BeanDefinition(未完成)

Spring类型转化(未完成)

Spring Bean(未完成)

Spring BeanScope(未完成)

Spring 国际化和数据绑定/数据校验(未完成)

Spring 资源抽象(未完成)

Spring 泛型解析(未完成)

Spring事件(未完成)

Spring 各种生命回调周期解析(未完成)

Spring 上下文刷新全过程解析(未完成)

talk is cheap , show me the code

1. Spring IOC继承体系概述

简介各种BeanFactory的接口和核心功能

1.1

1.1 BeanFactory

是SpringIOC容器的根容器,仅仅提供Spring Bean的依赖查找功能。相关功能如图1.2

1.2

1.2 HierarchicalBeanFactory

提供层次性的依赖查找功能,相关类图如下

1.3
  • containsLocalBean(String beanName) : 是用来判断当前层次上下文中是否包含该beanName对应的Spring Bean
  • getParentBeanFactory() : 用来获取父容器如果有的话!

源码使用场景和位置

            // AbstractBeanFactory#doGetBean 278行
            // 1. 获取父容器
            BeanFactory parentBeanFactory = getParentBeanFactory();
            // 2. 若父容器存在且当前容器不存在该beanName
            if (parentBeanFactory != null && !containsBeanDefinition(beanName)) {
                // Not found -> check parent.
                String nameToLookup = originalBeanName(name);
        //....省略一些逻辑
          //3. 去父容器中获取
                        }else {
                    return (T) parentBeanFactory.getBean(nameToLookup);
            }

1.3 ConfigurationBeanFactory

//通过集成SingletonBeanRegistry 也具有了注册和获取单实例SingletonBean的功能
public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, SingletonBeanRegistry{}

提供了诸多容器相关配置,比如是否允许循环依赖,设置classLoader , 添加BeanPostProcessor (Bean的后置处理器,后面有文章详细介绍) , 类型转化相关(TypeConverter,RegisterEditor..) ,是容器的基本配置入口,也提供了注册相关Scope和单实例bean的方法

1.4 ListableBeanFactory

提供了符合类型的bean查找,以及根据注解/类型查询匹配的所有Bean ,以及提供延迟查找ObjectProvider等。

1.3

1.5 AutowireCapableBeanFactory

提供了依赖注入的相关的核心接口功能,以及创建/销毁/查找解析Bean,以及Bean相关初始化阶段的回调生命周期接口

[站外图片上传中...(image-7f87ff-1607514876786)]

1.6 ConfigurableListableBeanFactory

//集成了多个功能BeanFactory接口,提供了配置,单一和集合复杂类型查找,以及依赖注入功能
public interface ConfigurableListableBeanFactory
        extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory {}

且该容器工厂接口对象,添加了一些辅助sh生命周期接口,比如核心的registerResolvableDependency注册 '游离'的依赖注入Bean,以及所有Bean都注册完毕之后的核心回调方法preInstantiateSingletons ,还有一些忽略注入类型的接口

image-20201209163106810

1.7 最核心的BeanFactory工厂类 : DefaultListableBeanFactory

//1. 通过实现ConfigurableListableBeanFactory获取单一和复杂集合类型的查找能力,继承抽象注入工厂(依赖注入核心实现)
//2. 实现BeanDefinitionRegister , 提供获取和注册BeanDefinition的功能
public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
      implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {}

1.8 用的最多的应用上下文 : ApplicationContext

相比BeanFactory,我们业务开发过程中遇到的最多还是ApplicationContext,它在BeanFactory基础上提供了一些列企业开发的功能,如Resource资源管理,外部化配置,事件,国际化等。并提供了丰富的容器(BeanFactoryPostProcessor)和Bean的生命周期回调(BeanPostProcessor)等等。

//1. 复合了EnvironmentCapable 外部化配置和Profile环境切换功能
//2. 组合了BeanFactory获取BeanFactory工厂的所有能力
//3. MessageSource : 国际化文案功能 , ApplicationEventPublisher : 事件功能 , ResourcePatternResolver:资源解析
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, 
HierarchicalBeanFactory,
        MessageSource, ApplicationEventPublisher, ResourcePatternResolver {}

1.9 应用上下文核心生命周期实现 : AbstractApplicationContext

//1. 抽象应用上下文,为Spring中最为常用的上下文实现,封装了SpringIOC的核心生命周期和刷新过程
//2. 符合了ResourceLoader资源加载功能,以及ConfigurableApplicationContext的LifeCycle相关生命周期功能
public abstract class AbstractApplicationContext extends DefaultResourceLoader
        implements ConfigurableApplicationContext {}

1.10 现阶段使用最多的注解驱动上下文 : AnnotationConfigApplicationContext

//1. 继承通用上下文实现
//2. 实现了注解配置注册类,提供注解方式注册Bean和Bean Scan扫描方式
public class AnnotationConfigApplicationContext extends GenericApplicationContext implements AnnotationConfigRegistry{}

后续会对这些常用的工厂容器对象Api进行实践和介绍

你可能感兴趣的:(Spring系列开篇IOC容器体系介绍)