带你徒手撸一个Spring Mini框架(手把手带你写一个MiniSpring视频课程最新版)

Spring 不仅是最常用的开源框架,面试中出现频率也比较高。但经过多年发展,它已成为枝繁叶茂的大树,面对“葱葱郁郁”的源代码,很多人经常会迷失其中……

我在学习和使用 Spring 的时候,经历过这三个阶段:

刚开始使用时,很快就遇到瓶颈了;
当我开始阅读源码、了解原理解决困惑后,仍然处于似懂非懂的程度;
后来就尝试自己动手写 Spring,遇到问题想破脑袋后翻查 Spring 的源代码,在一遍一遍地挫折借鉴中打通关节,终于豁然开朗了!
都说学习一种技能最好的形式,就是用自己的方式复现,但是手撸 Spring 框架这件事我们真的能做到吗?

当然可以,如果我们只是实现一个「微型」的 Spring 框架的话,还是可以搞定的。
具体怎么做呢?请听我娓娓道来

我的经验是,理论是要补充的,而且要体系化;其次,实践非常重要,学习 Spring 一定不要去死看书。

我们的目标是掌握 Spring 框架,所以我们不用去独创什么概念和结构,而是老老实实按照 Spring 的结构模仿着手写。自己动手,尽量少用现成的包,以刀耕火种的方式写程序,这可以让我们彻底地理解底层原理。

在这里,我推荐一张「中国 Java 研发工程师鼻祖」之一郭屹梳理的「手写 MiniSpring 体系图」,内容自于他的《手把手带你写一个 MiniSpring》专栏,建议先码后看。

图片

他采用快速迭代的开发模式,从一个最简单的程序开始,一步步堆积演化,每写一小段代码,都是一个可运行的框架。在不断迭代中完善框架功能,去实现 Spring 框架的核心:IOC、MVC、JDBC Template 和 AOP。

在一步步迭代的过程中,将 Spring 的底层原理融入代码中,一层层对照 Spring 框架的现有结构,让原理理解起来不再困难。

我单独学设计模式总是学不扎实,这个专栏还有一个吸引我的点,就是他把 Spring 8 大设计模式都穿插到了课程中,潜移默化地提高设计编码能力。

郭屹  前 Sun Microsystems Java 研发工程师,开源软件 MiniSpring、MiniTomcat 开发者

在长达 30 余年的编程生涯中,他经历了Java 技术的飞速发展,积累了丰富的行业经验和技术实践,有 MiniSpring、MiniTomcat、MiniRedis、MiniLanguage 等几款开源作品。除此之外,他还十分乐于分享自己的知识和经验,一直以来都在通过写作、讲演等方式推动着编程社区的发展。

当我知道他出了专栏时,非常惊喜,一上线就订阅了。

总的来说,他从 Spring 核心源码讲起,带你系统掌握 IoC、AOP 等核心功能,跟着学下来,只用 8 周,就可以搭建一个可用的 Spring 框架。今天只需一顿饭钱,推荐你学一下:

这个课程是怎么设计的?

手写 MiniSpring 的课程大体上分成四大部分:IoC 容器、MVC、JDBC Tempalte 和 AOP。这四大部分就是 Spring 框架的核心了。学好这些,今后你扩展到更多方面也会很容易。

第一部分:IoC容器
IoC 容器是 Spring 核心中的核心,Spring 抽象出 Bean这个概念,用一个容器管理所有的 Bean,并解决上层应用的业务对象之间的耦合问题。后面所有的特性都依赖于 Bean 的概念和这个容器。因此即使我们简单地说 Spring 框架就是一个 IoC 容器也未尝不可。

这个部分从一个极简容器开始,逐步扩展增强,最终实现一个完整的 IoC 容器,包含 Spring 框架对应的核心功能,实现 Bean 的管理。基于这个核心,逐步扩展到 MiniSpring 的其他特性。打好这个基础,后面的学习会事半功倍。

第二部分:MVC
MVC 是 Spring 支持 Web 模式的程序结构,它是基于 Servlet 技术实现的。基本思路是利用 Servlet 机制,用一个单一的 Servlet 拦截所有请求,然后把任务分派给不同的业务类处理,实现原始的 MVC 结构。

在这一部分将 MVC 与第一部分的 IoC 容器结合起来,构成一个更大、更完整的框架。在一步步的构造过程中,他重点讲解大师们怎么逐步拆解这个 Servlet 的功能,把专业的事情交给专门的部件去做,最后构建成一个完整的体系。

第三部分:JDBC Tempalte
JDBC Tempalte 是 Spring 对数据访问的一个实现,重点分析 Spring 的实现方法,体现 Rodd Johnson 对简洁实用原则的把握。这一部分,我们会学习如何提取出一个 JDBC 访问的模板,来固化访问数据库的流程,怎么自动绑定参数值,简化上层应用程序。在此基础之上,我们还将了解到如何通过数据库连接池提高访问性能,以及模仿 MyBatis 将 SQL 语句配置到外部文件中。

通过这部分的学习,我们可以了解到,整个 JDBC Template 的实现都是运用了前面 IoC 管理 Bean 的方式,将数据的访问抽象成一个个 Bean,注入到系统中。由此,更能深刻体会到 IoC 容器的功用。

第四部分:AOP
AOP 是 Spring 框架中实践面向切面编程的探索。面向对象和面向切面,两者一纵一横,编织成完整的程序结构。在这一部分,我们将了解到 Spring AOP 所采用的一个实现方式:JDK 动态代理。我们会学习动态代理的原理,以及如何用这个技术动态插入业务逻辑。

最后我们将再一次看到 AOP 与 IoC 的结合,使用 BeanPostProcessor 可以通过自动化机制生成动态代理。这时你就会体会到,我前面说的“IoC 是 Spring 框架核心中的核心”。

在这一步一步地演化过程中,我们对 Spring 的模仿逐渐成型。

具体内容可以看看目录:

带你徒手撸一个Spring Mini框架(手把手带你写一个MiniSpring视频课程最新版)

立即购买

本站内容均为网友上传分享,本站仅负责分类整理,如有任何问题可联系我们(点这里联系)反馈。

(0)
adminadmin
上一篇 2023年12月26日
下一篇 2023年12月26日

相关推荐

  • 如何搭建一个推荐系统?手把手带你搭建推荐系统黄鸿波

    搭建一个推荐系统的过程可以理解为构建一个能够根据用户的历史行为和偏好,自动向用户推荐相关内容或产品的系统。这个过程涉及到多个步骤和领域知识,包括数据收集、特征工程、机器学习算法、模…

    2024年1月2日
    02
  • 操作系统实战 45 讲

    从 0 到 1,实现自己的操作系统 彭东 网名 LMOS,Intel 傲腾项目关键开发者 加入交流群 彭东的 OS 实战交流群 你将获得 洞悉 OS 运行机制与架构实现 强化理解 …

    极客时间 2023年4月24日
    071
  • Vim 实用技巧必知必会

    让编程效率神器为我所用 吴咏炜 前 Intel 资深软件架构师 你将获得 即学即用的 Vim 高频命令 定制自己专属的 Vim 环境 利用 Vim 脚本和插件实现常用功能 Vim …

    极客时间 2023年4月24日
    010
  • 如何讲好一堂课

    以学生为中心的课程设计方法论 薛雨 北京新东方教学经理,新东方互联网产品技术总监 你将获得 了解课程设计的底层逻辑; 掌握内容筹备的核心方法; 完善课程内容的逻辑架构; 学会生动地…

    极客时间 2023年4月24日
    02
  • AI 应用实战课培训课程

    带你熟练使用 AI 技术解决实际问题 黄佳,新加坡科研局首席研究员(Lead Researcher),前埃森哲新加坡公司资深顾问,入行 20 余年。参与过政府部门、银行、电商、能源…

    2024年1月4日
    03
  • 快速上手C++数据结构与算法57节课完整版学习

    手撕优质代码,突破算法难关 王健伟  《C++新经典》系列作者,资深C++讲师 我常常与你们探讨算法的重要性,但有同学向我提出疑虑:虽然算法重要,但在日常工作中…

    2023年12月26日
    00
  • 物联网开发实战

    从 0 开始实现一个智能家居项目 郭朝斌 小米生态链企业秒秒测 IoT 事业部总监,前诺基亚高级工程师 【专栏交流群】 你将获得 完整的物联网知识体系搭建 物联网关键技术深度剖析 …

    极客时间 2023年4月24日
    010
  • 全链路压测实战 30 讲

    吃透全链路压测,摆脱性能瓶颈 高楼 盾山科技 CEO,7DGroup 创始人 你将获得 最前沿的压测技术洞察 系统完整的项目落地过程详解 性能瓶颈的快速定位能力 简洁高效的压测报告…

    极客时间 2023年4月24日
    039
  • web漏洞发掘方式主要有哪些:Web 漏洞挖掘实战教程

    10 大安全风险速递,实战智能攻防 王昊天 螣龙安科 CEO 兼创始人 你将获得 攻防兼备的 Web 安全知识体系 搭建属于自己的攻防对抗系统 真实场景下的实战经验总结 顶层视角的…

    极客时间 2023年4月24日
    012
  • langchain是什么课程?LangChain 实战课

    LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的Python框架。 手把手带你开发专属的 ChatGPT 应用 黄佳,新加坡科研局首席研究员(…

    2023年12月20日
    00

发表回复

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