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)

大家都在看

  • 【Java面试手册-基础篇】能否在Java中终止main方法?

    答案是肯定的,可以使用 System.exit() 方法终结 main() 方法。 示例代码如下: package com.magic.main; public class Mai…

    Java 2023年6月8日
    062
  • 一种基于Java Swing/HTML/MySQL的汽车租赁系统

    该项目是一个Java的课程作业(大二),主要运用Java、Swing、HTML、MySQL,实现基本的租车逻辑、界面可视化、信息导出、数据存储等功能。实现管理员、用户两种角色登录,…

    Java 2023年6月5日
    079
  • springcloud各种网址

    1.springcloud中文文档: https://springcloud.cc/spring-cloud-dalston.html 2.疑难杂症解决网址 springcloud…

    Java 2023年5月30日
    074
  • 2022年最新动力节点Java自学全套视频资源

    今天整理了java开发的学习路线和相关的学习视频资源,非常适合零基础入门java的小伙伴,希望大家在学习的时候,能够节省时间。 【B站排名第一的】Java零基础视频844集(适合J…

    Java 2023年6月9日
    087
  • Swagger详解(SpringBoot+Swagger集成)

    Swagger-API文档接口引擎Swagger是什么Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和…

    Java 2023年5月30日
    081
  • HTML详解

    一、初识HTML 初始基本标签代码解释 点击查看代码 <!–DOCTYPE:告诉浏览器我们要使用什么规范–> <!DOCTYPE html> <h…

    Java 2023年6月13日
    056
  • 译文《全新首发JDK 16全部新特性》

    封面:洛小汐 译者:潘潘 JDK 8 的新特性都还没摸透,JDK 16 的新特性就提着刀来了。 郑重申明:第一次冒险翻译专业领域的文献,可想而知,效果特别糟糕。一般翻译文献特别是 …

    Java 2023年6月13日
    045
  • 【转】Nginx open_file_cache模块 文件描述符缓存

    在我前面的博客介绍了nginx缓存,但是nginx还有一个很重要的缓存功能只针对于打开的文件句柄以及源信息叫做open_file_cache,open_file_cahce对我们优…

    Java 2023年5月30日
    047
  • 【Mybatis错误】Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 584; The content of elements must consist of well-formed character data or markup

    编译器自动把sql语句中的小于号当成了开始标签 and a.start_time 你投入得越多,就能得到越多得价值 Original: https://www.cnblogs.co…

    Java 2023年5月30日
    0132
  • Nginx常见问题

    基于端口的虚拟机: 使用端口来区分,浏览器使用域名或ip地址:端口号 访问。 注意:~ 代表自己输入的英文字母。 16、location正则案例 1 #优先级1,精确匹配,根路径 …

    Java 2023年6月5日
    073
  • 5、发送模板消息

    POST数据示例如下: java;html-script:false;quick-code:true;smart-tabs:true;auto-links:false;toolba…

    Java 2023年6月13日
    051
  • 22部漫威电影大合集和观影顺序

    【原文链接】:https://blog.tecchen.tech ,博文同步发布到博客园。由于精力有限,对文章的更新可能不能及时同步,请点击上面的原文链接访问最新内容。欢迎访问我的…

    Java 2023年6月6日
    094
  • mycat高可用-安全管理-监控 看这一篇就够了

    ​ 在之前的操作中,我们已经实现了mysql机器的高可用,可以动态切换master,那么如果mycat崩溃了呢?我们应该如何处理呢?所以此时就需要搭建mycat的高可用集群了。 ​…

    Java 2023年6月7日
    052
  • Vue

    Vue 学习目标 前端知识体系 HTML(页面的结构)、CSS(表现层)、JavaScript(行为) HTML 就不说了。 CSS CSS层叠样式是一门标记语言,并不是编程语言,…

    Java 2023年6月5日
    085
  • 软考学习计划

    上半年考完软件设计师,当时自己估了一下分感觉没过,为此心里都准备下半年再战了…还发了文作了总结,大家可以点击链接看:软考经验总结昨天下午软考群里一长串信息刷屏,我瞄了瞄…

    Java 2023年6月13日
    065
  • Spring类ResolvableType、BeanWrapper使用

    在阅读Spring、SpringMVC 源码的时候经常看到这几个类,简单总结下这几个工具类的核心使用方法。 1. ResolvableType 直译过来就是可解析类型。 实际是对j…

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