服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

徒手撸了个Spring Mini框架,真不错 | 极客时间

日期: 来源:InfoQ收集编辑:

大家好,我是郭屹,作为一名深耕软件开发行业 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 之旅!

相关阅读

  • YYDS,哈工大博士的PyTorch笔记火了!!

  • Pytorch是目前常用的深度学习框架之一,它凭借着对初学者的友好性、灵活性,发展迅猛,它深受学生党的喜爱,我本人也是使用的Pytorch框架。比起 TF 的框架环境配置不兼容,和 Keras
  • 【第2885期】精读《Headless 组件用法与原理》

  • 前言Headless 组件即无 UI 组件,框架仅提供逻辑,UI 交给业务实现。今日前端早读课文章由 @黄子毅分享,公号:前端精读评论授权。正文从这开始~~Headless 组件即无 UI 组件,框架仅提
  • 干了几年开发运维,为何我毫不犹豫学这个?

  • 随着容器的快速发展,容器管理工具Kubernetes(下文简称K8s)也应运而生,目前不仅百度、京东、阿里、Google等大公司在使用K8s,一些中小企业也开始把业务迁移到K8s中。K8s在人工智能
  • 奇舞周刊第485期:3 个容易混淆的前端框架概念

  • 记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~ 奇舞推荐■ ■ ■ 3 个容易混淆的前端框架概念大家好,我卡颂。有 3 个容易混淆的前端框架概念:响
  • 临潼区获全市社会主义核心价值观建设先进单位

  • 3月10日,在西安市召开的全市宣传部长会议上,临潼区委宣传部获授2022年度西安市社会主义核心价值观建设工作唯一先进单位。去年以来,临潼区委宣传部通过构建“1+1+N”的常态工作
  • 2023 Web 框架性能报告出炉

  • 【CSDN 编者按】基于某些数据基准更好地选择框架、性能和网络上实际用户体验之间的关系。原文链接:https://astro.build/blog/2023-web-framework-performance-report/未经允

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 一次性搞定数据分析的必要知识!| Q推荐

  • 近几年,数据应用场景不断丰富,从工业、交通、金融到制造,几乎无处不在。数据价值的飞速提升给开发者和相关企业带来了新的问题,对于企业而言,数据指数级增长的情况下,使存储成本和
  • 徒手撸了个Spring Mini框架,真不错 | 极客时间

  • 大家好,我是郭屹,作为一名深耕软件开发行业 30 年的老兵,我从 1998 年加入 Sun Microsystems,就开始跟 Java 以及 Spring 打交道了。我一直认为刻意练习再加上适当输出,可以在帮