大家好,我是郭屹,作为一名深耕软件开发行业 30 年的老兵,我从 1998 年加入 Sun Microsystems,就开始跟 Java 以及 Spring 打交道了。
我一直认为刻意练习再加上适当输出,可以在帮助别人的同时更有效地提高自己的技艺。所以这些年在编程的同时,我也一直坚持写作,先后出版了《认识编程》《Java 编程十五讲》等书籍,同时也成为了机械工业出版社专家委员会委员。希望我的分享能对你有帮助。
众所周知,Java 诞生二十几年来,一直是业界的主流语言和平台。而 Spring 则是 Java 开发的事实平台,我们说用 Java 编程,其实是在 Spring 框架上编程。即便最近几年进化到用分布式架构如 Spring Cloud 进行开发,它的底层内核仍然是 Spring 框架。
Spring 作为我们最常用的开源框架,面试中出现频率也比较高。但经过多年发展,它已成为枝繁叶茂的大树,面对“葱葱郁郁”的源代码,很多技术人经常会迷失其中……
我在学习和使用 Spring 的时候,经历了这三个阶段:
    • 刚开始使用时,很快就遇到瓶颈了;
    • 当我开始阅读源码、了解原理解决困惑后,仍然处于似懂非懂的程度;
    • 后来就尝试自己动手写 Spring,遇到问题想破脑袋后翻查 Spring 的源代码,在一遍一遍地挫折借鉴中打通关节,终于豁然开朗了!
所以,我也想带你回归本质,通过手撸一个 Spring 框架来揭开 Spring 神秘的面纱!
我们自己动手,尽量少用现成的包,以刀耕火种的方式写程序,这可以让我们彻底地理解底层原理
虽然都说学习一种技能最好的形式,就是用自己的方式复现,但是手撸 Spring 框架这件事我们真的能做到吗?当然可以,如果我们只是实现一个「微型」的 Spring 框架的话,那还是可以实现的。
1 具体怎么做呢?请听我娓娓道来
我计划采用快速迭代的开发模式,从一个最简单的程序开始,一步步堆积演化,每写一小段代码,都是一个可运行的框架。在不断迭代中完善框架功能,最终实现 Spring 框架的核心:IOC、MVC、JDBC Template 和 AOP
在一步步的迭代过程中,将 Spring 的底层原理融入代码中,一层层对照 Spring 框架的现有结构,让原理理解起来不再困难。
希望你能够从一开始就跟我一起动手,毕竟编程说到底是一个手艺活,就是动手去写,只要结合“眼脑手”三者,不断练习,就能大有成效
具体的内容,在我跟极客时间合作开设的《手把手带你写一个 MiniSpring》中,目前专栏已经上线,感兴趣的朋友可以试读看看。
2 这个课程我是怎么设计的?
手写 MiniSpring 的课程大体上分成四大部分:IoC 容器、MVC、JDBC Tempalte 和 AOP
熟悉 Spring 框架的人也知道,这四大部分就是 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 框架的过程中,分析程序结构,阅读源代码,还能让我们体会到世界顶级程序员作品的精妙之处。我们可能达不到他们那种高度和深度,但是通过学习、模仿,也能让我们的水平有本质的提升。
更进一步,我们自己在工作中,了解了这些底层技术,就会有意识地去借鉴这些大师们的结构,让我们自己能承担更加困难、更加复杂的工作。跟我一起模仿出一个 MiniSpring 框架,一定能加深你对 Spring 框架底层的原理及设计模式的认知。
课程原价 ¥99
今日早鸟到手,仅需 ¥69
《诗经》有云:“有匪君子,如切如磋,如琢如磨”。虽然中途会遇到困难,但我希望你可以坚持学习,站到山顶,跟我一起领略 Spring 的风采!
点击「阅读原文」,开启手写 Spring 之旅!
继续阅读
阅读原文