# springSourceCode **Repository Path**: HanXu2015/spring-source-code ## Basic Information - **Project Name**: springSourceCode - **Description**: spring源码学习,详情请看-https://bugstack.cn/ 小傅哥手撸系列 - **Primary Language**: Java - **License**: Unlicense - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-11-03 - **Last Updated**: 2023-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## spring源码学习 ### 一、相关类的介绍 #### 1.1 通用 **BeansException**:自定义异常。 **BeanDefinition**:包装 class 对象 。 **BeanReference**:记录属性--引用类型,当 value instanceof BeanReference 时, 说明为引用类型,则执行 getBaen 方法。 **PropertyValue**:记录类的属性信息的。 **PropertyValues**:记录多个属性。 **InstantiationStrategy**:实例化策略。 **SimpleInstantiationStrategy**:实现 InstantiationStrategy, 简单策略。 **CglibSubclassingInstantiationStrategy**:实现 InstantiationStrategy, Cglib方式。 **ClassUtils**:实现了一个返回 ClassLoader 的方法。 #### 1.2 Bean相关 **BeanFactory**:定义了不同的 getBean 抽象方法(有无参数-对象属性的不同,基本数据类型,引用数据类型等)。 **SingletonBeanRegistry**:单例注册表,定义了获取单例的抽象方法。 **DefaultSingletonBeanRegistry**:继承 SingletonBeanRegistry,实现单例的获取和保存。 **AbstractBeanFactory**: 继承 DefaultSingletonBeanRegistry 实现 BeanFactory,重写了 getBean 方法。 **AbstractAutowireCapableBeanFactory**:继承 AbstractBeanFactory,重写 AbstractBeanFactory 中的 creatBaen 方法,使用不同的实例化策列。 **BeanDefinitionRegistry**:定义注册 BeanDefinition 的抽象方法。 **DefaultListableBeanFactory**:继承 AbstractAutowireCapableBeanFactory 实现 BeanDefinitionRegistry,重写注册 BeanDefinition 的抽象方法和获取 BeanDefinition 的抽象方法,并且定义了保存 BeanDefinition 的集合。 **AutowireCapableBeanFactory**:是一个自动化处理Bean工厂配置的接口,目前案例工程中还没有做相应的实现,后续逐步完善。 **BeanDefinitionReader**:Bean定义读取接口,顶层接口,抽象方法。 **AbstractBeanDefinitionReader**:实现的 BeanDefinitionReader ,重写Bean定义读取接口。 **XmlBeanDefinitionReader**:继承的 AbstractBeanDefinitionReader,如果有其他的方式只需继承即可。在完成读取XML文件后,调用BeanDefinitionRegistry 中的注册 BeanDefinition 方法,保存 BeanDefinition。 **HierarchicalBeanFactory**:在 Spring 源码中它提供了可以获取父类 BeanFactory 方法,属于是一种扩展工厂的层次子接口。 **ConfigurableBeanFactory**:继承的 HierarchicalBeanFactory ,可获取 BeanPostProcessor、BeanClassLoader等的一个配置化接口。 **ConfigurableListableBeanFactory**:继承的 HierarchicalBeanFactory ,提供分析和修改Bean以及预先实例化的操作接口。 **ListableBeanFactory**:是一个扩展 Bean 工厂接口的接口,新增加了 getBeansOfType、getBeanDefinitionNames() 方法,在 Spring 源码中还有其他扩展方法,扩展一些 获取 bean的方法。 **BeanFactoryPostProcessor**:在所有的 BeanDefinition 加载完成后,实例化 Bean 对象之前,提供修改 BeanDefinition 属性的机制。 **BeanPostProcessor**:用于修改新实例化 Bean 对象的扩展点,在实例话前后做操作。 **DisposableBean、InitializingBean**:实现此接口的 Bean 对象,会在 BeanFactory 设置属性后作出相应的处理,如:执行自定义初始化,或者仅仅检查是否设置了所有强制属性。或者销毁操作。 **DisposableBeanAdapter**:实现的 DisposableBean,定义销毁方法适配器,统一进行销毁操作。 #### 1.3 IO类 **Resource**:定义的 获取处理资源加载流 抽象方法,顶层父类。 **ClassPathResource、UrlResource、FileSystemResource**:都是继承自Resource,重写各自的 获取处理资源加载流 方法。 **ResourceLoader**:定义获取 资源(resource)的抽象方法和使用的常量。 **DefaultResourceLoader**:资源加载器实现,创建并返回不同的 Resource。 #### 1.4 Context类 **ApplicationContext**:顶层上下文接口,继承的 ListableBeanFactory 中的获取 Bean 方法,本身未新增方法。 **ConfigurableApplicationContext**:继承的 ApplicationContext接口,提供刷新上下文的抽象方法。 **AbstractApplicationContext**:继承的 DefaultResourceLoader 实现的 ConfigurableApplicationContext,抽象类,按功能分层,把不同的功能分散到不同的类中。主要是重写刷新上下文的抽象方法 refresh(),该方法中使用到的具体实现,一部分本类中实现,一部分交由其继承类实现。和Bean工厂类似。 **AbstractRefreshableApplicationContext**: **AbstractXmlApplicationContext**: **ClassPathXmlApplicationContext**: #### 1.5 bean类 #### 二、其它