网上解读Spring源码的文章很多,也很好,但是本人觉得当前的Spring5.X体系代码结果过于复杂,本着只学Spring核心功能IOC、AOP的核心,简单为大,特寻根溯源,找到2002年Spring的前身com.interface21,那时候的Spring还不叫Spring,但是核心和现在的还是很相似,学习起来得心应手。
模型驱动:另外本文首先从Spring XML配置文件到Spring Bean的Model的映射开始,先理解Spring Bean的Model模型,这对于理解整个Spring的IOC大有裨益,IOC初始化无非就是将Model转换成实例化的Spring Bean,也可以更深入的理解Rod Johnson的设计初衷。
源码下载:https://download.csdn.net/download/woailaopoqq/15380786
一、启示
分三部分讲,BeanFactory继承体系+XML配置文件映射Spring内部的Model+Spring Bean初始化流程
1.1 BeanFactory体系图
1.2 Spring Bean 存储模型
1.3 Spring Bean 初始化流程
二、解释
2.1 BeanFactory体系图
为什么设计这么复杂,接口继承,设计模式
Spring的本质是实现了一个bean工厂(beanFactory),它按照我们的要求,生产我们需要的各种各样的bean,便捷的供调用方试用,实例化一个Bean所需的配置信息通过XML、注解或者其他模式实现,提供了一个环境去实例化bean,也可以称之为容器,什么是容器?大家可以思考,比如Servlet容器,和Spring容器有什么异同?
2.1.1 BeanFactory
/**
Bean工厂,顶层接口
*/
public interface BeanFactory {
/**
根据Bean Name获取Bean
*/
Object getBean(String name) throws BeansException;
/**
根据Bean Name,Class 类型获取Bean
*/
Object getBean(String name, Class requiredType) throws BeansException;
}
2.1.2 Spring IOC方法调用 流程
类名 | 方法名 | 功能描述 |
---|---|---|
XmlBeanFactory | public XmlBeanFactory(String filename) throws BeansException | XmlBeanFactory |
XmlBeanFactory | private void loadBeanDefinitions(InputStream is) throws BeansException | 解析xml配置文件 |
XmlBeanFactory | private void loadBeanDefinitions(Document doc) throws BeansException | 将xml配置文件映射到BeanDefinition |
XmlBeanFactory | private void loadBeanDefinition(Element el) throws BeansException | 将xml配置文件映射到BeanDefinition |
XmlBeanFactory | PropertyValues pvs = getPropertyValueSubElements(el); | 将xml配置文件中Bean的属性放到PropertyValues |
XmlBeanFactory | private BeanDefinition parseDefaultBeanDefinition(Element el, String beanName, PropertyValues pvs) | 获取BeanWrapper中beanInfo等信息 |
ListableBeanFactoryImpl | public final void registerBeanDefinition(String prototypeName, BeanDefinition beanDefinition) | 获取BeanDefinition |
XmlBeanFactory |