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进行实践和介绍

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336