2.2 Spring的结构组成–Spring源码深度解析

2.2 Spring的结构组成–Spring源码深度解析

beans源码结构

  在Spring源码中,用于实现2.1中功能是org.Springframework.beans.jar,下图是beans依赖的jar包,当然spring-core是必须的。

    2.2 Spring的结构组成--Spring源码深度解析

  Spring 使用了N多的代码实现了2.1的功能,让我们首先尝试梳理一下Spring的框架结构,从全局的角度了解一下Spring的结构组成。

beans 包的层次结构

  我们先看整个beans工程的源码结构

    2.2 Spring的结构组成--Spring源码深度解析

    beans包中的各个源码包的功能如下:

      src/main/java 用于展示Spring的主要逻辑。

      src/main/resources 用于存放系统的配置文件。

      src/test/java 用于对主要逻辑进行单元测试。

      src/test/resources 用于存放测试用的配置文件。

核心类介绍

  DefaultListableBeanFactory

    XmlBeanFactory 继承自 DefaultListableBeanFactory ,而 DefaultListableBeanFactory 是整个bean加载的核心部分,是Spring注册及加载bean的默认实现。

    xmlBeanFactory 与 DefaultListableBeanFactory 不同的地方其实是在 XmlBeanFactory 中使用了自定义的XML读取器 XmlBeanDefinitionReader ,实现了个性化的 BeanDefinitionReader 读取。

    DefaultListableBeanFactory 继承了 AbstractAutoWriteCapableBeanFactory 并实现了 ConfigurableListableBeanFactory 以及 BeanDafinitionRegistry 接口。

    ConfigurableListableBeanFactory 的层次结构,详见 

      网址:https://github.com/myaq1314/learn-spring-beans/blob/master/src/main/java/zhi/hao/bean/DefaultListableBeanFactory.xml 

      AliasRegistry 定义对alias的简单增删改查等操作。

      SimpleAliasRegistry 主要使用map作为alias的缓存,并对接口AliasRegistry进行实现。

      SingletonBeanRegistry 定义对单例的注册及获取。

      BeanFactory 定义获取bean及bean的各种属性。

      DefaultSingletonBeanRegistry 对接口SingletonBeanRegistry各函数的实现。

      HierarchicalBeanFactory 继承BeanFactory,也就是在BeanFactory定义的功能的基础上增加了对parentFactory的支持。

      BeanDefinitionRegistry 定义对BeanDefinition的各种增删改查操作。

      FactoryBeanRegistrySupport 在DefaultSingletonRegistry基础上增加了对FactoryBean的特殊处理功能。

      ConfigurableBeanFactory 提供配置Factory的各种方法。

      ListableBeanFactory 根据各种条件获取bean的配置清单。

      AbstractBeanFactory 综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。

      AutowireCapableBeanFactory 提供创建bean、自动注入、初始化以及应用bean的后处理器。

      AbstractAutoCapableBeanFactory 综合AbstractBeanFactory并对接口AutowireCapableBeanFactory进行实现。

      ConfigurableListableBeanFactory BeanFactory配置清单,指定忽略类型及接口等。

      DefaultListableBeanFactory 综合以上所有功能,主要是对Bean注册后的处理。

    XmlBeanFactory 对DefaultListableBeanFactory类进行了扩展,主要用于从XML 文档中读取BeanDefinition,对于注册及获取Bean都是使用从父类DefaultListableBeanFactory 继承的方法去实现,而唯独与父类不同的个性化实现就是增加了XmlBeanDefinitionReader类型的reader属性。在XmlBeanFactory中主要使用reader属性对资源文件进行读取和注册。

      

 

转载于:https://www.cnblogs.com/chuzh/p/5002535.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109229.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • betterIntellij 最新激活码【在线破解激活】[通俗易懂]

    betterIntellij 最新激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    99
  • 分布式事务、cloud、boot、常规队列MQ、elk、kafuka

    分布式事务、cloud、boot、常规队列MQ、elk、kafuka点击链接》》》这个博客里面的专栏。apache-jmeter-3.3的简单压力测试使用方法https://www.cnblogs.com/ios9/p/7644951.html#_label3 

    2022年5月15日
    29
  • arm linux启动过程_项目冷启动和热启动的区别

    arm linux启动过程_项目冷启动和热启动的区别微处理器:LPC2114编译环境:KeilMDKV4.10思路:常把单片机系统的复位分为冷启动和热启动。所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的,通常是0x00或0xFF;单片机的热启动是通过外部电路给运行中的单片机的复位端一复位电平而实现的,也就是所说的按键复位或看门狗复位。复位后,RAM的内容都没有改变。在某些场合,必须区分出设备的重启是热重启还是冷重启。常…

    2022年10月30日
    0
  • k8s(十)基本存储[通俗易懂]

    k8s(十)基本存储[通俗易懂]文章目录概述EmptyDirHostPathNFSk8s的数据存储概述在前面已经提到,容器的生命周期可能很短,会被频繁的创建和销毁。那么容器在销毁的时候,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器中的数据,kubernetes引入了Volume的概念。Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里面的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据

    2022年8月9日
    0
  • 如何遍历ArrayList集合,并安全删除其中的元素[通俗易懂]

    如何遍历ArrayList集合,并安全删除其中的元素[通俗易懂]如何遍历ArrayList集合,并安全删除其中的元素?1、遍历ArrayList集合有三种方式(1)for循环(2)增强for循环,也就是foreach(3)迭代器iterator2、普通for循环遍历删除元素,list集合的大小会变小,而索引也会发生改变,所以利用ffor循环遍历删除元素会漏调某些元素。例如我for循环遍历删除第一个元素,接着按照…

    2022年7月22日
    11
  • Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)[通俗易懂]

    Java单例模式的不同写法(懒汉式、饿汉式、双检锁、静态内部类、枚举)[通俗易懂]Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。单例模式好处:它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间; 能够避免由于操作多个实例导致的逻辑错误。 如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制的作用…

    2022年7月25日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号