• 翻开spring源码横看竖看,满屏只有四个字,看不懂啊。幸好我有大神的深度剖析spring源码,轻松看懂


    前言

    有一天,我翻开源码横看竖看,满屏只看到四个字,我看不懂啊。
    所以是不是曾和我一样迷失在毫无头绪的源码里,在各种类和方法里翻山越岭,却如同管中窥豹。是的话,要不今晚早点睡?

    呸,扯远了,写文章怎么能分神呢。

    所以正当我苦恼的时候,我想起了一句话“给我一个支点我就可以撬动整个地球”,阿基米德说的。

    咦,突然让我灵机一动,那撬动整个Spring源码的支点是什么呢?或者说Spring作者在开发Spring时的支点是什么呢?这么想让我开始觉得有点意思了。

    如果尝试先从使用Spring的角度来看源码,好像事情也并没有那么错综复杂。

    你是怎么使用Spring的,你就怎么看Spring源码!

    先把镜头拉回到使用Spring后最大变化是什么?毫无疑问是改变了我们编程方式,原来是程序员自己既要定义对象,然后还要通过new的方式创建出对象。而在Spring中则我们只需要定义Bean,然后交给Spring来创建对象(从甲乙方的角度,定义对象是提需求的甲方,实现对象是执行的乙方。那么new的方式是即做甲方又做乙方。而Spring让程序员当了一回甲方)。

    而这个动作就是IOC(Inversion of Control)控制反转。不过IoC不是一种具体的技术,而是一种设计思想。

    那问题来了,IoC是怎么来的?

    其实IoC可以追溯到一个原则,好莱坞原则。把IOC对应到这一原则,一切都很好理解,就是在IoC中,所有的对象都是被动的,对象初始化和调用都由Spring负责。

    “不要给我们打电话,我们会给你打电话(don‘t call us, we‘ll call you)”这是著名的好莱坞原则。在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。—— 好莱坞原则

    Bean是Spring中的图纸

    为什么要有Bean,或者说Bean是什么呢?
    我们知道无论是控制反转还是依赖注入都是围绕Object,而对应到Spring中也就是Bean;Bean其实是包装了的Object(对象)
    所以Bean是Spring中最核心的东西,Bean`好比有了图纸,才能在Spring上建各种不同的的房子、车子。
    可以说一个Bean就是经过了我们定义最后由Spring所创建的Object。
    (所以对于程序而言是由一堆的Object构成,那么在Spring所构成的程序里就是一堆Bean)

    不多说了,一起跟着大神抽丝剥茧,把spring核心部分撕碎,彻底读懂spring源码,理解框架,本文一共分为七个部分,内容较多,小编下面以文字+截图形式为大家展示

    Spring概述

    • Spring简介

    Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC和AOP为内核,提供了展现层SpringMVC 和业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,已经成为使用最多的 Java EE 企业应用开源框架。

    • Spring发展历程
    • Spring的优势
    • Spring的核心结构(如下图)
    • Spring的框架版本

    Spring的核心思想

    IOC和AOP不是spring提出的,在spring之前就已经存在,只不过更偏向于理论化,spring在技术层次把这两个思想做了非常好的实现(Java)

    IoC

    • 什么是IoC
    • IoC解决了什么问题
    • IoC和DI的区别

    AOP

    • 什么是AOP
    • AOP在解决什么问题
    • 为什么叫做面向切面编程

    手写实现 IoC 和 AOP

    上个部分我们理解了IoC和AOP思想,我们先不考虑Spring是如何实现这两个思想的,此处准备了一个【银行转账】的案例,请分析该案例在代码层次有什么问题 ?分析之后使用我们已有知识解决这些问题(痛点)。其实这个过程我们就是在一步步分析并手写实现 IoC和AOP。

    • 银行转账界面
    • 银行转账案例表结构
    • 银行转账案例代码调用关系
    • 银行转账案例关键代码
    • 银行转账案例代码问题分析
    • 问题解决思路
    • 案例代码改造

       

       

    Spring IOC 应用

    Spring IoC基础

    • BeanFactory与ApplicationContext区别
    • 纯xml模式
    • xml与注解相结合模式
    • 纯注解模式

    Spring IOC高级特性

    • lazy-Init 延迟加载
    • FactoryBean 和 BeanFactory
    • 后置处理器

    Spring IOC源码深度剖析

    Spring IoC容器初始化主体流程

    • Spring IoC的容器体系
    • Bean生命周期关键时机点
    • Spring IoC容器初始化主流程

       

    BeanFactory创建流程

    • 获取BeanFactory子流程
    • BeanDefinition加载解析及注册子流程

    Bean创建流程

    lazy-init 延迟加载机制原理

    Spring IoC循环依赖问题

    • 什么是循环依赖
    • 循环依赖处理机制

       

    Spring AOP 应用

    AOP本质:在不改变原有业务逻辑的情况下增强横切逻辑,横切逻辑代码往往是权限校验代码、日志代码、事务控制代码、性能监控代码。

    AOP 相关术语

    • 业务主线
    • AOP 术语

       

    Spring中AOP的代理选择

    Spring中AOP的配置方式

    Spring中AOP实现

    • XML 模式
    • XML+注解模式
    • 注解模式

    Spring 声明式事务的支持

    Spring AOP源码深度剖析

    代理对象创建

    • AOP基础用例准备
    • 时机点分析
    • 代理对象创建流程

       

    Spring声明式事务控制

    • @EnableTransactionManagement
    • 加载事务控制组件

       

    总结

    这份满满都是干货的Spring高级源码笔记是由华南谷歌架构师总结出来的,这位大佬对于Spring框架的理解程度真的以及到了一个“恐怖变态”的地步了

  • 相关阅读:
    visual设置
    Oracle-ADG部署
    【学习日志】2022.11.10 C++11常量表达式、用户定义字面量、原生字符串字面值、类的改进、Leetcode疼迅优选50提T1
    RN:Error: /xxx/android/gradlew exited with non-zero code: 1
    基于51单片机病床呼叫系统proteus仿真设计(protues仿真+源码+报告)
    深入 K8s 网络原理(一)- Flannel VXLAN 模式分析
    docker - DockerFile 编写 指令
    80,90,00,房子最终砸在买房哪一代人手中?
    代码随想录 10.13 || 二叉树 LeetCode 235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
    【云原生 | 43】快速搭建Docker Registry私有仓库
  • 原文地址:https://blog.csdn.net/LBWNB_Java/article/details/127880227