吃下这个,Spring面试算啥?
你好,我是yes。
打开本文的朋友,可能都跟 Java 打过交道。其实,Spring 是 Java 开发的事实平台,我们说用 Java 编程,其实是在 Spring 框架上编程。
Spring 不仅是最常用的开源框架,面试中出现频率也比较高。但经过多年发展,它已成为枝繁叶茂的大树,面对“葱葱郁郁”的源代码,很多人经常会迷失其中……
我在学习和使用 Spring 的时候,经历过这三个阶段:
刚开始使用时,很快就遇到瓶颈了; 当我开始阅读源码、了解原理解决困惑后,仍然处于似懂非懂的程度; 后来就 尝试自己动手写 Spring ,遇到问题想破脑袋后翻查 Spring 的源代码,在一遍一遍地挫折借鉴中打通关节,终于豁然开朗了!
都说学习一种技能最好的形式,就是用自己的方式复现,但是手撸 Spring 框架这件事我们真的能做到吗?
具体怎么做呢?请听我娓娓道来
我的经验是,理论是要补充的,而且要体系化;其次,实践非常重要,学习 Spring 一定不要去死看书。
我们的目标是掌握 Spring 框架,所以我们不用去独创什么概念和结构,而是老老实实按照 Spring 的结构模仿着手写。自己动手,尽量少用现成的包,以刀耕火种的方式写程序,这可以让我们彻底地理解底层原理。
在这里,我推荐一张「中国 Java 研发工程师鼻祖」之一郭屹梳理的「手写 MiniSpring 体系图」,内容自于他的《手把手带你写一个 MiniSpring》专栏,建议先码后看。
他采用快速迭代的开发模式,从一个最简单的程序开始,一步步堆积演化,每写一小段代码,都是一个可运行的框架。在不断迭代中完善框架功能,去实现 Spring 框架的核心:IOC、MVC、JDBC Template 和 AOP。
在一步步的迭代过程中,将 Spring 的底层原理融入代码中,一层层对照 Spring 框架的现有结构,让原理理解起来不再困难。
关于作者 - 郭屹
作为一个 30 年技术老兵,他可以称为中国 Java 研发工程师鼻祖之一:曾在 Sun Microsystems 公司 Java 研发中心担任 J2EE 研发工程师,同时他也是 JDBC Driver、Minis 开发者,Norming 软件国际的 CTO。
在长达 30 余年的编程生涯中,他经历了Java 技术的飞速发展,积累了丰富的行业经验和技术实践,有 MiniSpring、MiniTomcat、MiniRedis、MiniLanguage 等几款开源作品。除此之外,他还十分乐于分享自己的知识和经验,一直以来都在通过写作、讲演等方式推动着编程社区的发展。
当我知道他要出专栏时,非常惊喜,所以专栏一上线,我就订阅了。
总的来说,他从 Spring 核心源码讲起,带你系统掌握 IoC、AOP 等核心功能,跟着学下来,只用 8 周,就可以搭建一个可用的 Spring 框架。今天上新特惠,只需一顿饭钱,推荐你学一下:
这个课程是怎么设计的?
手写 MiniSpring 的课程大体上分成四大部分:IoC 容器、MVC、JDBC Tempalte 和 AOP。这四大部分就是 Spring 框架的核心了。学好这些,今后你扩展到更多方面也会很容易。
IoC 容器是 Spring 核心中的核心,Spring 抽象出 Bean这个概念,用一个容器管理所有的 Bean,并解决上层应用的业务对象之间的耦合问题。后面所有的特性都依赖于 Bean 的概念和这个容器。因此即使我们简单地说 Spring 框架就是一个 IoC 容器也未尝不可。
这个部分从一个极简容器开始,逐步扩展增强,最终实现一个完整的 IoC 容器,包含 Spring 框架对应的核心功能,实现 Bean 的管理。基于这个核心,逐步扩展到 MiniSpring 的其他特性。打好这个基础,后面的学习会事半功倍。
MVC 是 Spring 支持 Web 模式的程序结构,它是基于 Servlet 技术实现的。基本思路是利用 Servlet 机制,用一个单一的 Servlet 拦截所有请求,然后把任务分派给不同的业务类处理,实现原始的 MVC 结构。
在这一部分将 MVC 与第一部分的 IoC 容器结合起来,构成一个更大、更完整的框架。在一步步的构造过程中,他重点讲解大师们怎么逐步拆解这个 Servlet 的功能,把专业的事情交给专门的部件去做,最后构建成一个完整的体系。
JDBC Tempalte 是 Spring 对数据访问的一个实现,重点分析 Spring 的实现方法,体现 Rodd Johnson 对简洁实用原则的把握。这一部分,我们会学习如何提取出一个 JDBC 访问的模板,来固化访问数据库的流程,怎么自动绑定参数值,简化上层应用程序。在此基础之上,我们还将了解到如何通过数据库连接池提高访问性能,以及模仿 MyBatis 将 SQL 语句配置到外部文件中。
通过这部分的学习,我们可以了解到,整个 JDBC Template 的实现都是运用了前面 IoC 管理 Bean 的方式,将数据的访问抽象成一个个 Bean,注入到系统中。由此,更能深刻体会到 IoC 容器的功用。
AOP 是 Spring 框架中实践面向切面编程的探索。面向对象和面向切面,两者一纵一横,编织成完整的程序结构。在这一部分,我们将了解到 Spring AOP 所采用的一个实现方式:JDK 动态代理。我们会学习动态代理的原理,以及如何用这个技术动态插入业务逻辑。
最后我们将再一次看到 AOP 与 IoC 的结合,使用 BeanPostProcessor 可以通过自动化机制生成动态代理。这时你就会体会到,我前面说的“IoC 是 Spring 框架核心中的核心”。
在这一步一步地演化过程中,我们对 Spring 的模仿逐渐成型。
具体内容可以看看目录:
在学习 Spring 框架的过程中,分析程序结构,阅读源代码,还能让我们体会到世界顶级程序员作品的精妙之处,我们的水平有本质的提升。
更进一步,我们自己在工作中,了解了这些底层技术,就会有意识地去借鉴这些大师们的结构,让我们自己能承担更加困难、更加复杂的工作。模仿出一个 MiniSpring 框架,一定能加深你对 Spring 框架底层的原理及设计模式的认知。
今日早鸟到手,仅需 ¥69
点击「阅读原文」,我们一起去领略 Spring 的风采!
微信扫码关注该文公众号作者