BeanFactory

Bean工厂实现应该尽可能的支持bean的生命周期接口,完整的初始化及其标准顺序为:

  1. BeanNameAware#setBeanName(设置bean名称)
  2. BeanClassLoaderAware#setBeanClassLoader(设置类加载器)
  3. BeanFactoryAware#setBeanFactory(设置Bean工厂)
  4. org.springframework.context.ResourceLoaderAware#setResourceLoader(仅适用于有上下文的应用)
  5. org.springframework.context.ApplicationEventPublisherAware#setApplicationEventPublisher(仅适用于有上下文的应用)
  6. org.springframework.context.MessageSourceAware#setMessageSource(仅适用于有上下文的应用)
  7. org.springframework.context.ApplicationContextAware#setApplicationContext(仅适用于有上下文的应用)
  8. org.springframework.web.context.ServletContextAware#setServletContext(仅适用于有Web上下文的应用)
  9. org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization(AOP的前置增强)
  10. InitializingBean#afterPropertiesSet(初始化bean,比如@PostConstruct)
  11. org.springframework.beans.factory.support.RootBeanDefinition#getInitMethodName(初始化方法,比如)
  12. org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(AOP后置增强)
  13. DisposableBean#destroy(销毁Bean)
  14. org.springframework.beans.factory.support.RootBeanDefinition#getDestroyMethodName(调用销毁方法,比如@PreDestroy)

上述引用自BeanFactory源码描述。

DefaultListableBeanFactory

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

结构图:

类图及描述:

XmlBeanDefinitionReader

XML配置文件的读取是Spring中的重要功能,因为Spring的大部分功能都是以配置文件作为切入点。

依赖图:

BeanDefinitionDocumentReader

XmlBeanDefinitionReader真正的注册(在registerBeanDefinitions方法调用时创建)过程委托BeanDefinitionDocumentReader的实现DefaultBeanDefinitionDocumentReader处理。

DefaultBeanDefinitionDocumentReader

在解析过程,doRegisterBeanDefinitions方法又会创建BeanDefinitionParserDelegate,委托BeanDefinitionParserDelegate去做专门的元素解析,

Resource

Resource是Spring内部使用的资源的抽象,该接口封装了底层资源:

部分类图:

BeanDefinition

BeanDefinition用于承载各种属性,GenericBeanDefinition2.5版本后加入的一站式服务类,父bean用  RootBeanDefinition表示,子bean则用ChildBeanDefinition,如果没有父类则直接使用RootBeanDefinition。

Spring源码杂集相关推荐

  1. Spring源码分析【1】-Tomcat的初始化

    org.apache.catalina.startup.ContextConfig.configureStart() org.apache.catalina.startup.ContextConfig ...

  2. Spring源码分析【0】-框架的基础:继承和接口调用链

    Spring源码大量的使用继承和接口调用,现举个例子,不搞清楚这个无法看代码. public class A extends B{public void f1() {System.out.printl ...

  3. Spring源码分析篇(一)之Gradle环境搭建

    Gradle的简介我就不在此多废话了,我们直接上步骤 本人的操作环境是mac jdk1.8+spring5.x版本 编译工具:IDEA IntelliJ 一.熟悉你需要的spring源码包 这个源码包 ...

  4. spring根据名称获取bean_带你从零开始手写 spring ioc 框架,深入学习 spring 源码

    IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理. 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过 ...

  5. 想读Spring源码?先从这篇「 极简教程」开始

    来自:Java中文社群 为什么要阅读源码?这是一个有趣的问题,类似的问题还有,为什么要看书?为什么要爬山? 这也是一个哲学问题,我想每个人都有不同的答案,下面我是对阅读源码好处的一些思考.(PS:也欢 ...

  6. spring 源码 找不到 taskprovider_一步一步构建Spring5源码

    点关注,不迷路:持续更新Java相关技术及资讯!!! 构建环境 macOS 10.13.6 JDK1.8 IntelliJ IDEA 2018.3.6 (Ultimate Edition) Sprin ...

  7. 如何将spring源码作为导入eclipse中,变成一个普通的项目(git、github)

    引子: 怎么查看spring-framework的源码?是不是用压缩软件解压jar包,然后用编辑软件看?高端一点的,是在eclipse上面,按住Ctrl键跳转着看?这里我给大家介绍更加高端一点的方法. ...

  8. spring 源码 找不到 taskprovider_Spring 源码阅读环境的搭建

    " 前言 本文记录了 Spring 源码环境的搭建方式,以及踩过的那些坑!​当前版本:5.3.2-SNAPSHOT. 环境准备 Git JDK master 分支需要 JDK 11 5.2. ...

  9. 『互联网架构』软件架构-spring源码之spring结构概述

    spring从07年接触到目前2018年也差不多10年了,一个java的框架为什么能火这么多年.很多人对spring的使用轻车熟路,但是从未解读过spring的源码,老铁跟我一起看看源码,了解下内部的 ...

  10. Spring源码阅读 源码环境搭建(一)

    ring 源码阅读的搭建(一) 一 下载spring源码 进入官方网页:https://spring.io/projects/spring-framework 进入相关的github位置,下载zip包 ...

最新文章

  1. Linux内核网络数据包发送(一)
  2. 如何把讨厌的人踢出局域网(kickthemout)
  3. QT的QLatin1String类的使用
  4. 日本的电视节目到底能有多特别?
  5. 网站压力测试软件(Apache JMeter)2.13 官方版 Error: Unable to access jarfile ApacheJMeter.jar
  6. 如何化身BAT面试收割机?不吃透都对不起自己
  7. 前端学习(1736):前端系列javascript之创建webpack与loader使用
  8. mysql 整数类型_MySQL的数据类型
  9. 漫步微积分三十六——曲面的面积
  10. 畅通工程(最小生成树模板)
  11. 软件开发有哪些规范和标准_车辆,机械专业如何从事汽车电子软件开发
  12. Zookeeper学习笔记——1 单机版本环境搭建
  13. Atitit netcore 问题与解决 目录 1. 导入第三方dll库 1 1.1. 跨平台开发netcore程序 2 1.2. 不能生产dll问题,可能是360杀毒监控了。。 2 2. 运行dl
  14. 最新更新云码支付,星糖付多合一全自动码商,商户,代理,支付一体系统完整数据源码
  15. Ueditor编辑器修改字体和字号?
  16. Qt实现类似QQ头像
  17. 法语学习笔记——语音
  18. DEV的RIchEditControl加载rtf文档时,为mergefield赋值
  19. jquery closest()的用法
  20. Java進階:ExecutorService 線程池

热门文章

  1. 圣诞节苹果服务器没有人维护2020,2020圣诞节真的推迟到1月8号吗
  2. 我是如何出版一本书的?(2)
  3. HUAWER 华为5G无线数据终端 和 TP-LINK路由器AX6000连接及注意事项
  4. BCH分叉影响深远 业内外热议不断
  5. 扁平化设计-扁平化与拟物设计对比
  6. Java第十九天:mysql(二)
  7. NVIDIA驱动安装
  8. 少年张三丰java版_长这么大才知道,《少年张三丰》有两个版本,更喜欢哪一个版本...
  9. 如何从 GitHub 上下载指定项目的单个文件或文件夹
  10. 反证法与归谬法的区别