Spring 5 源码解析-概述-1

  • 源地址
  • 本篇文章基于spring-framework Release v5.3.5(7c2a72c) 版本进行源码分析。
  • 官方源码地址: https://github.com/spring-projects/spring-framework
  • fork 项目地址:https://gitee.com/streamplume/spring-framework.git (v5.3.5-learning 分支根据个人理解添加了注释) 澄清概念,设定判准,构建体系。 – 傅佩荣
  • spring-framework 可以理解成一个Bean容器管理框架。在系统运行时,由spring-framework框架统一管理Bean实例对象的创建,依赖和销毁,而不用业务系统主动维护依赖关系。在编写业务代码时,只要软件工程师按照系统规划,做好业务逻辑类的抽象,封装,那么在运行系统时,只要根据需要简单修改配置,就可以轻松切换不同业务逻辑的实现。同时 spring-framework 对管理的依赖无侵入性。
  • spring-framework 项目在启动时, 使用 ApplicationContext 实现类,创建程序运行上下文(coentext),并创建管理bean对象实例的BeanFactory, 注册响应事件的监听器 (Listener),并根据需要管理不同功能组件的生命周期(Lifecycle) 。

spring-framework 主要接口和实现类:

  • org.springframework.beans.factory.BeanFactory
    spring-framework 核心顶层接口。定义了获取 bean 实例和处理 bean 相关属性判断的标准。spring-framework主要功能都是围绕实现该接口功能。
    Spring 5 源码解析-概述-1
  • org.springframework.beans.factory.support.DefaultListableBeanFactory
    spring-framework 中BeanFactory接口的默认实现类。目前运行项目时,默认使用该类管理 bean 对象实例。
    Spring 5 源码解析-概述-1
  • org.springframework.context.ApplicationContext
    spring-framework 运行上下文环境顶级接口。继承 EnvironmentCapable 接口,ResourceLoader 子接口, BeanFactory 子接口,MessageSource 接口,ApplicationEventPublisher 接口,即定义了运行上下文环境 需要实现的标准。
    Spring 5 源码解析-概述-1
  • org.springframework.context.support.ClassPathXmlApplicationContext
    spring-framework 运行上下文环境的一个实现类。该类实现读取 ClassPath 路径下的xml文件,加载 bean 相关的配置,并管理 bean 的创建,依赖。
    Spring 5 源码解析-概述-1
  • org.springframework.beans.factory.config.BeanFactoryPostProcessor
    BeanFactory 后置处理器接口。进行 BeanFactory 类的后置处理。bean 配置文件的后置处理。
    Spring 5 源码解析-概述-1
  • org.springframework.beans.factory.config.BeanPostProcessor
    Bean 后置处理器接口。Bean 创建时进行特殊处理。例如 Bean 的动态代理就是通过 org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator 实现。
    Spring 5 源码解析-概述-1
  • org.springframework.context.event.ApplicationEventMulticaster
    事件广播器。统一管理注册的事件监听器。
    Spring 5 源码解析-概述-1
  • org.springframework.context.ApplicationListener
    事件监听器。定义是事件监听器使用标准。
    Spring 5 源码解析-概述-1
  • org.springframework.context.ApplicationEvent
    事件接口。定义了事件的标准规范。
    Spring 5 源码解析-概述-1
  • org.springframework.core.convert.ConversionService
    类型转换服务接口。定义了将配置文件中字符串转换成目标类型的标准。
    Spring 5 源码解析-概述-1
  • org.springframework.core.convert.support.DefaultConversionService
    类型转换服务默认实现类。
    Spring 5 源码解析-概述-1
  • org.springframework.context.Lifecycle
    特殊bean生命周期管理接口。
    Spring 5 源码解析-概述-1
  • org.springframework.context.LifecycleProcessor
    Lifecycle 接口的统一管理类。运行上下文环境加载好后,调用 Lifecycle 接口start()的方法

Spring 5 源码解析-概述-1

参考资料:

Spring源码深度解析31精讲: https://www.bilibili.com/video/BV1iZ4y137CZ

孙哥说Spring5: https://www.bilibili.com/video/BV185411477k

Original: https://www.cnblogs.com/StreamPlume/p/14643527.html
Author: 流羽
Title: Spring 5 源码解析-概述-1

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574110/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Maven基础

    核心思想:约定大于配置其实约定大于配置这一思想在开发中经常出现当程序中的某一个或者某一些参数没有配置的时候,程序会自动设定一个默认值。这个默认值的设定,就称之为约定。意义在于:减少…

    Java 2023年6月7日
    096
  • for what

    what for ? posted @2022-08-15 12:40 yub4by 阅读(24 ) 评论() 编辑 Original: https://www.cnblogs.c…

    Java 2023年6月5日
    060
  • springboot使用@Async实现异步调用

    异步与同步 同步就是整个处…

    Java 2023年6月5日
    0109
  • springboot 整合 Shiro 配置类

    ckage org.fh.config; import org.apache.shiro.cache.ehcache.EhCacheManager; import org.apac…

    Java 2023年6月8日
    084
  • SoapUI5.0创建WebService接口模拟服务端(转)

    转载自:https://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要…

    Java 2023年5月30日
    0103
  • JavaDoc

    JavaDoc javadoc命令是用来生成自己API文档的。 参数信息: * @author 作者名 @version 版本号 @sinse 指明需要最早使用的JDK版本 @pa…

    Java 2023年6月9日
    081
  • 如何导入数据库驱动包及连接

    在我们运行代码时,出现ClassNotFountException:com.mysql.jdbc.Driver,说明我们没有导入数据库驱动jar包,或者导错包了 导入数据库驱动: …

    Java 2023年6月8日
    0129
  • Spring Cloud 任务简介

    一、概述 Spring Cloud Task 的目标是为 Spring Boot 应用程序提供创建短期微服务的功能。 在 Spring Cloud Task 中,我们可以灵活地动态…

    Java 2023年5月30日
    062
  • 穿透Session 0 隔离

    服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的”开启~关闭”…

    Java 2023年5月30日
    0100
  • PyScript:让Python在HTML中运行

    大家好,我是DD,已经是封闭在家的第51天了! 最近一直在更新Java新特性和IDEA Tips两个专栏,其他方向内容的动态关注少了。昨天天晚上刷推的时候,瞄到了这个神奇的东西,觉…

    Java 2023年6月9日
    0110
  • 【SpringCloud-Alibaba系列教程】10.gateway网关

    简介 在SpringCloud中网关作为一个重要的组成部分,网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。API 网关是一个处于应用程序或服务(…

    Java 2023年6月5日
    0107
  • 【转】Android开发:JavaDoc注释插件简单使用介绍

    Android Studio: File → Settings → Plugins → Browse repositories 搜索插件名【JavaDoc】 并安装或者Androi…

    Java 2023年5月29日
    080
  • Guava Preconditions 工具参数前置校验

    guava 提供 Preconditions 作为代码校验的工具类,用来简化开发中对代码的校验或预处理,在逻辑开始前进行合理性校验,避免参数传入过深导致的数据错误。 并且能够在不符…

    Java 2023年5月29日
    082
  • MQTT 入门(1)–简介

    MQTT(消息队列遥测传输)是 ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议 ;本文主要介绍 MQTT 协议 3.1.1 的内容。 1、概述 1…

    Java 2023年6月16日
    088
  • LVS + Nginx 的架构模式

    posted @2021-08-17 10:34 FrankYou 阅读(51 ) 评论() 编辑 Original: https://www.cnblogs.com/franky…

    Java 2023年5月30日
    096
  • Mac 系统用mx master3遇到的问题

    买 master3 之前上网看到的资料都是夸的不行,提到的问题也都是无足轻重,然而就我个人来说,在 Mac 下实际使用 master3 的感受很糟糕,写这篇文章分享一下遇到的问题,…

    Java 2023年6月5日
    092
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球