在Sping官网中的一段入门代码
todo
步骤如下
-
读取Spring的配置文件
-
从配置文件中找到对应Bean的信息(bean的那一段信息)
-
根据找到的Bean信息进行实例化Bean
所以要想
【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 开源分享
实现容器,至少需要3个类
-
ConfigReader:用来读取和校验配置文件,读取完后放入内存中等待使用
-
ReflectionUtil:从内存中取出配置文件并取出Bean的信息,然后进行实例化Bean
-
App:串联ConfigReader和ReflectionUtil去完成整个Bean的实例化操作
当然,Spring没有可能这么简单就是实现
下面就来认识一下Spring框架的整体架构是怎么样的
beans包的层级结构
-
jmh模块:创建bean的基准
-
main模块:bean模块的核心
-
test和testFixtures:测试模块
核心类
Spring中有两大核心类
-
DefaultListableBeanFactory:默认的bean加载
-
XmlBeanDefinitionReader:读取XML配置文件
DefaultListableBeanFactory
DefaultListableBeanFactory是整个Bean加载的核心部分,像XmlBeanFactory(已弃用)是继承了DefaultListableBeanFactory的,与其不同的是,XmlBeanFactory中使用了自定义的XML读取器,实现了个性化的Bean读取
首先来看看这个核心类的整体架构
-
AbstractBeanFactory继承了FactoryBeanRegistrySupport
-
DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory,并且实现了ConfigurableListableBeanFactory和BeanDefinnitionRegistry接口
那么我们就针对这个结构来说明一下各个部分是做什么的,仅仅有个认识
第一条分支,提供别名CRUD、单例注册和获取、FactoryBean操作等功能
-
AliasRegistry:该接口定义了对别名的增删查改操作(上面没显示,该接口是被SimpleAliasRegistry实现了的)
-
SimpleAliasRegistry:实现了AliasRegistry接口,即有对别名的增删查改操作的实现,而且对alias的存储使用了Map来作为缓存
-
SingletonBeanRegistry:该接口定义了对单例的注册及获取(上面没显示,该接口是被DefaultSingletonBeanRegistry实现了的)
-
DefaultSingletonBeanRegistry:实现了SingletonBeanRegistry,也就是实现了对单例的注册及获取方法,并且继承了SimpleAliasRegistry,所以也支持对别名进行操作
-
FactoryBeanRegistrySupport:继承了DefaultSingletonBeanRegistry,所以基础是建立在DefaultSingletonBeanRegistry上的,并且其增加了对FactortyBean的特殊处理,从这里开始,FactoryBeanRegistrySupprt已经支持了别名、单例、FactoryBean的操作了
-
AbstractBeanFactory;继承了FactoryBeanRegistrySupport,并且实现了ConfigurableBeanFactory接口,所以其综合了FactoryBeanRegistrySupport和ConfigurableBeanFactory功能
从现在开始就产生了另外一条分支了,生产Bean需要使用到Factory,然而Factory是需要进行配置的!
-
BeanFactory:定义一系列获取Bean的方法,根据不同参数、条件去获取Bean,ByType或者ByName
-
HierarchicalBeanFactory:继承了BeanFactory,在BeanFactory基础下增加了对ParentFactory的支持
-
ConfigurableBeanFactory:该接口继承了HierarchicalBeanFactory,并且定义了对Factory进行配置的各种方法(生产Bean需要Factory,而Factory是需要进行配置的)
-
ListableBeanFactory:该接口定义了根据条件去获取Bean的配置信息的方法
到现在为止,AbstractBeanFactory已经可以支持对Factory进行配置,可以根据Factory获取Bean、注册和获取单例、对Bean的别名进行操作功能了
下面继续看AbstractBeanFactory的父类
-
AutowrieCapableBeanFactory:该接口继承了BeanFactory,所以拥有获取Bean的规范,并且提供了创建Bean、自动注入、初始化以及应用Bean的后处理器
-
AbstractAutowireCapableBeanFactory:继承了AbstractBeanFactory,在AbstractBeanFactory基础上,实现了AutowireCapableBeanFactory提供创建Bean、自动注入、初始化以及应用Bean的后处理器,也就是可以自动注入、创建和获取Bean了
-
ConfigurableListableBeanFactory:该接口继承了ListableBeanFactory、AutowireCapableBeanFactory和ConfigurableBeanFactory,并且提供了BeanFactory的配置清单、指定忽略类型等功能
-
DefaultListableBeanFactory:两条线汇总在一起,继承了AbstractAutowireCapableBeanFactory并且继续实现了ConfigurableListableBeanFactory接口,所以综合了以上的所有功能,可以进行配置加载、创建获取Bean、自动注入和初始化功能,并且主要是对bean注册后进行处理
可以看到,DefaultListableBeanFactory对应上了一大堆实现和继承关系
XmlBeanDefinitionReader
使用过Spring的都对XML配置文件不陌生,XML配置文件的读取是Spring中重要的功能,而XmlBeanDefinitionReader则是负责XML配置文件的读取、解析以及注册功能
下面认识几个类和接口的作用