阿里资深架构师分享之全程手写Spring

阿里十年架构师纯手写的Java核心知识笔记限时分享,全程无废话 这本Java岗必备核心笔记,对于程序员来说真是一大福音,不管是初学者,还是资深架构师相信都能让你受益匪浅。此笔记不但内容覆盖面广, 条理清晰,而且图文并茂,使读者更易懂。 阅读详情

人见人爱的Spring已然不仅仅只是一个框架了

如今,Spring已然成为了一个生态。但深入了解Spring的却寥寥无几。这里,我带大家一起来看看,我是如何手写Spring的。我将结合对Spring十多年的研究经验,用不到400行代码来描述SpringIOC、DI、MVC的精华设计思想,并保证基本功能完整。

首先,我们先来介绍一下Spring的三个阶段,配置阶段、初始化阶段和运行阶段(如图):

阿里资深架构师分享之全程手写Spring

 

配置阶段:主要是完成application.xml配置和Annotation配置。

初始化阶段:主要是加载并解析配置信息,然后,初始化IOC容器,完成容器的DI操作,已经完成HandlerMapping的初始化。

运行阶段:主要是完成Spring容器启动以后,完成用户请求的内部调度,并返回响应结果。

先来看看我们的项目结构(如下图)

阿里资深架构师分享之全程手写Spring

 

一、配置阶段

我采用的是maven管理项目。先来看pom.xml文件中的配置,我只引用了servlet-api的依赖。

阿里资深架构师分享之全程手写Spring

 

然后,创建GPDispatcherServlet类并继承HttpServlet,重写init()、doGet()和doPost()方法。

阿里资深架构师分享之全程手写Spring

 

在web.xml文件中配置以下信息:

阿里资深架构师分享之全程手写Spring

 

在<init-param>中,我们配置了一个初始化加载的Spring主配置文件路径,在原生框架中,我们应该配置的是classpath:application.xml。在这里,我们为了简化操作,用properties文件代替xml文件。以下是properties文件中的内容:

阿里资深架构师分享之全程手写Spring

 

接下来,我们要配置注解。现在,我们不使用Spring的一针一线,所有注解全部自己手写。

创建GPController注解:

阿里资深架构师分享之全程手写Spring

 

创建GPRequestMapping注解:

阿里资深架构师分享之全程手写Spring

 

创建GPService注解:

阿里资深架构师分享之全程手写Spring

 

创建GPAutowired注解:

阿里资深架构师分享之全程手写Spring

 

创建GPRequestParam注释:

阿里资深架构师分享之全程手写Spring

 

使用自定义注解进行配置:

阿里资深架构师分享之全程手写Spring

 

到此,我们把配置阶段的代码全部手写完成。

二、初始化阶段

先在GPDispatcherServlet中声明几个成员变量:

阿里资深架构师分享之全程手写Spring

 

当Servlet容器启动时,会调用GPDispatcherServlet的init()方法,从init方法的参数中,我们可以拿到主配置文件的路径,从能够读取到配置文件中的信息。前面我们已经介绍了Spring的三个阶段,现在来完成初始化阶段的代码。在init()方法中,定义好执行步骤,如下:

阿里资深架构师分享之全程手写Spring

 

doLoadConfig()方法的实现,将文件读取到Properties对象中:

阿里资深架构师分享之全程手写Spring

 

doScanner()方法,递归扫描出所有的Class文件

阿里资深架构师分享之全程手写Spring

 

doInstance()方法,初始化所有相关的类,并放入到IOC容器之中。IOC容器的key默认是类名首字母小写,如果是自己设置类名,则优先使用自定义的。因此,要先写一个针对类名首字母处理的工具方法。

阿里资深架构师分享之全程手写Spring

 

然后,再处理相关的类。

阿里资深架构师分享之全程手写Spring

 

doAutowired()方法,将初始化到IOC容器中的类,需要赋值的字段进行赋值

阿里资深架构师分享之全程手写Spring

 

initHandlerMapping()方法,将GPRequestMapping中配置的信息和Method进行关联,并保存这些关系。

阿里资深架构师分享之全程手写Spring

 

到此,初始化阶段的所有代码全部写完。

三、运行阶段

来到运行阶段,当用户发送请求被Servlet接受时,都会统一调用doPost方法,我先在doPost方法中再调用doDispach()方法,代码如下:

阿里资深架构师分享之全程手写Spring

 

doDispatch()方法是这样写的:

阿里资深架构师分享之全程手写Spring

 

到此,我们完成了一个mini版本的Spring,麻雀虽小,五脏俱全。我们把服务发布到web容器中,然后,在浏览器输入:http://localhost:8080/demo/query.json?name=Tom,就会得到下面的结果:

阿里资深架构师分享之全程手写Spring

 

当然,真正的Spring要复杂很多,但核心设计思路基本如此。例如:Spring中真正的HandlerMapping是这样的:

阿里资深架构师分享之全程手写Spring

注意啦!需要资料的小伙伴可以转发关注小编,私信小编【666】来得到获取方式,每天分享技术干货!!

pynq-z2 HLS开发 定制Overlay一.用HLS生成一个定制IP功啊啊是合理的创建标题,有助于目录的生成如何改变是式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一.用HLS生成一个定制IP ... 阅读详情

相关推荐

MEME-CHIP实战:5步搞定ChIP-seq数据中的motif发现与可视化

本文提供了使用MEME-CHIP工具进行ChIP-seq数据motif发现与可视化的完整实战指南。通过5个清晰步骤,从数据准备、环境搭建、命令行执行到结果解读与高级可视化,详细讲解了如何利用MEME-CHIP工作流高效完成从原始peak序列到发表级motif图的分析,并分享了关键的参数调优与避坑经验。

alice7model的博客 508

明天面试?吓得我赶紧手写了一个Spring

引言 几乎每个面试的程序员都会碰到Spring相关的面试问题,或浅或深。你都是如何回答面试官的问题的?——我不知道,我一般会通过手写一个Spring来加深自己的印象。 目标 人见人爱的Spring已然不仅仅只是一个框架了。如今,Spring已然成为了一个生态。但深入了解Spring的却寥寥无几。这里,我带大家一起来看看,我是如何手写Spr...

weixin_34015566的博客 1469

基于POI-TL实现动态Word模板数据填充(含图表):从需求到落地的完整开发实践

本文聚焦企业级报告生成场景中 “在线编辑模板 + 动态数据填充” 的核心需求,详细阐述基于 POI-TL、OnlyOffice 与 MinIO 的全栈实现方案。通过代码示例拆解模板加载、文字填充、图表匹配渲染(含通过关系 ID 关联图表与段落的关键逻辑)、报告存储全步骤。最终通过技术组合实现业务人员可视化编辑模板、后端高效填充数据的目标,为同类动态 Word 生成需求提供可复用的实践参考。

imHanweihu的博客 1866

GitHub最新发布,阿里十年架构师手写版spring全家桶笔记全新开源

没错,又是我,还跟前面一样,有好东西我才会出现。那是什么好东西呢?今天啊,给他分享阿里在Github最新发布的spring全家桶笔记第九版,这份笔记一共分三份:spring高级源码+spring boot高工笔记+spring cloud实战详解,都是出自一个阿里十年架构师之手,不管是新手老手都能拿下来好好学习学习。话不多说,看内容。

m0_67645544的博客 735

极验第四代滑块验证码破解(三):滑块轨迹构造

极验第四代滑块验证码破解(三):滑块轨迹构造声明 声明 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 本文关联文章超链接:

帯泪的鱼的博客 8624

AutoSAR系列讲解(入门篇)4.6-BSW的Watchdog功能

BSW的看门狗功能

雪云飞星的博客 1万+

膜拜阿里架构师全程手写Spring MVC

人见人爱的Spring已然不仅仅只是一个框架了。如今,Spring已然成为了一个生态。但深入了解Spring的却寥寥无几。这里,我带大家一起来看看,我是如何手写Spring的。我将结合对Spring十多年的研究经验,用不到400行代码来描述SpringIOC、DI、MVC的精华设计思想,并保证基本功能完整。首先,我们先来介绍一下Spring的三个阶段,配置阶段、初始化阶段和运行阶段(如图): 配置...

weixin_34409822的博客 137

Python爬虫实战:全网政府招标信息采集与整合

本文详细介绍了如何使用Python构建一个完整的政府招标信息爬虫系统,涵盖了从数据采集、解析、存储到质量监控的全流程。多源采集:支持多个地方政府网站的同时采集智能解析:自动适应不同网站结构,智能提取关键信息异步高效:使用异步编程提高采集效率反爬应对:内置多种反爬虫应对策略数据质量:完善的数据清洗和质量监控机制易于扩展:模块化设计,便于添加新的数据源。

2201_76125261的博客 1380

GitHub最新发布 阿里十年架构师手写版spring全家桶笔记全新开源

嗨咯,大家好!没错,又是我,还跟前面一样,有好东西我才会出现。那是什么好东西呢?今天啊,给他分享,,不管是新手老手都能拿下来好好学习学习。话不多说,看内容。

Trouvailless的博客 296

YOLOv11改进策略【模型轻量化】| 替换轻量化骨干网络:ShuffleNet V1

本文记录的是基于ShuffleNet V1的YOLOv11轻量化改进方法研究。ShuffleNet利用和操作降低计算成本,克服了现有先进架构在极小网络中因 1×1 卷积计算成本高而效率低的问题。相比一些传统的网络架构,能更好地。本文配置了原论文中和四种模型,以满足不同的需求。

Limiiiing的博客 1228

【python股票价格预测】基于CNN-LSTM的股票价格预测(附python代码)

【python股票价格预测】基于CNN-LSTM的股票价格预测(附python代码)

k8291121的博客 2008

阿里巴巴资深架构师独家分享:Spring Data实战笔记,深入解读数据持久化之道

我深知Spring Data框架的奥秘。这个开源工具,宛如魔法般简化了数据库的访问,为云服务铺设了道路。它的主要目标,就是让数据库的探访变得轻松愉快,同时支持Map-reduce框架和云计算数据服务。不仅如此,它还与关系型数据库的数据服务紧密结合,如Oracle RAC等。对于那些需要处理海量数据的项目,Spring Data就如同一把利剑,帮助开发者简化项目的开发。Spring Data,就如同Spring Framework对JDBC、ORM的支持一样,为数据的访问开辟了新的道路。

Reische的博客 514

Isaac Sim 入门教程(四)强化学习策略训练宇树人形机器人四足机器人示例

isaac_sim_policy_example Extension 是在 Isaac Sim 中部署 Isaac Lab 强化学习策略的一个框架和一组辅助函数。有关在 Isaac Sim 中训练和构建策略的详细信息,请访问在 Isaac Sim 中部署策略。该扩展程序默认已启用。如果被禁用,可在扩展管理器中搜索 isaacsim.robot.policy.example 重新启用。要运行下面的示例,请激活 “视窗”>“示例”>“机器人示例”,这将打开 “机器人示例 ”选项卡。

机器人控制与仿真应用 3926

java架构师_阿里资深架构师纯手敲Java中高进阶架构师笔记(近千页开源)

Java作为目前最受欢迎的语言,每年都会有很多转行、跨行等等的人加入到开发大军中来,但是Java开发也是会遇到瓶颈的,当我们遇到瓶颈的时候就会去寻求发展突破,尤其是从Java开发高级工程师向架构师迈进的时候,需要大量的实战经验和知识的积累,而循着前人的脚步去学习就会起到一个事半功倍的效果!今天就来分享一份由阿里资深架构师纯手敲出来的Java中高级笔记,非常适合想或者正在向架构师方向发展的朋友们!由...

weixin_39640646的博客 124

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

分享阿里P8资深架构师总结的一份Java核心知识pdf,看完薪资翻倍

阿里 P8 级资深架构师吐血总结的一份 Java 核心知识.pdf, 内容覆盖很广,Java 核心基础、Java 多线程、高并发、Spring、微服务、Netty 与 RPC、Zookeeper、Kafka、RabbitMQ、Habase、设计模式、负载均衡、分布式缓存、Hadoop、Spark、Storm、云计算等。 获取方式:【关注 + 点赞】后,点这里,即可免费无套路获取哦~ 以下是资源的部分目录以及内容截图: 重要的事再说一遍,获取方式:【关注 + 点赞】后,点这里,即可免费无套路获取

weixin_47083537的博客 229

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

2024年后端面试每日一题 聊聊Spring(1),Java资深架构师分享学习经验及总结

可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取) &&!// 利用反射机制执行指定方法。

2401_84558091的博客 1250

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

阿里资深架构师纯手敲Java中高进阶架构师笔记(近千页开源)

Java作为目前最受欢迎的语言,每年都会有很多转行、跨行等等的人加入到开发大军中来,但是Java开发也是会遇到瓶颈的,当我们遇到瓶颈的时候就会去寻求发展突破,尤其是从Java开发高级工程师向架构师迈进的时候,需要大量的实战经验和知识的积累,而循着前人的脚步去学习就会起到一个事半功倍的效果!今天就来分享一份由阿里资深架构师纯手敲出来的Java中高级笔记,非常适合想或者正在向架构师方向发展的朋友们!1. Java基本功 2. Java面向对象 3. Java核心技术 1. ArrayList 2. Linked

z1ztai的博客 166

阿里Java面试答案【283页PDF文档免费领】

怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习如何拿下阿里等大厂的offer的呢,今天分享一个秘密武器,资深架构师整理的Java核心知识点,面试时面试官必问的知识...

HollisChuang's Blog 1526

BAT大牛分享如何在最短的时间升职为阿里Java架构师

Web应用,最常见的研发语言是Java和PHP。 后端服务,最常见的研发语言是Java和C/C++。 大数据,最常见的研发语言是Java和Python。 可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,除了掌握Java语法,还要系统学习哪些Java相关的技术,今天分享一个...

Javascript94的博客 252

GitHub最新发布!阿里十年架构师手写版spring全家桶笔记全新开源

Spring 概述(基本情况) 核⼼思想 IoC 和 AOP ⼿写实现 IoC 和 AOP(⾃定义spring框架) Spring IoC ⾼级应⽤ Spring IoC 源码深度剖析 Spring AOP ⾼级应⽤ Spring AOP 源码深度剖析 必要的笔记、必要的图、通俗易懂的语⾔化解知识难点

老男孩的架构路 160

打不过就加入!字节70w年薪架构师终是败给了阿里天梯图

今年不愧是互联网最低谷,我有个朋友字节的资深架构师年薪七十万说裁就裁了,四月份整个业务线直接被干掉,自己拿了十几万的赔偿,就走了然后给自己放了一个月的假,结果发现各个公司裁员的动作越来越猛,就慌了去找工作俩月念了二十多家拿了一个offer(还是要求降薪20%),最后还是他的一位阿里的朋友救了他给了他一份阿里内部JAVA面经,又凭借自己的之前的经验面到了阿里P7的位置!......

m0_71777195的博客 202

网易资深Java架构师:php转java

前言 本份文档内容涵盖: Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、 Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈,共1000多道面试题。 由于文档内容过多,所以只列举了以下目录部分,每个知识点都有更细化的内容! 一面 自我介绍 项目难度介绍 如何实现延时任务 如何实现限流 线程池的参数 能不能自己实现一个java.lang

m0_57501529的博客 155

一箭双雕 刷完阿里P8架构师spring学习笔记+源码剖析,涨薪8K

我之前死磕spring的时候,刷各种资料看的我是一头雾水的,后面从阿里的P8架构师那里拿到这两份资料,从源码到案例详细的讲述了spring的各个细节,是我学Spring的启蒙资料,即便我现在在已经从事Java五六年了,但是每每掏出这份资料看都能再学到点新的知识。还记得当时磕完这份资料,后面跟老板提涨薪,直接就涨了8K!所以含金量可想而知。如果是为了应付一系列的面试从而恶补的知识,那么你会离涨薪越来越远,毕竟入职之后最终看重的还是技术,不要温水煮青蛙。...

MCO_TT0的博客 119

复习这份美团架构师的Java核心面试宝典,我四面阿里拿下offer

怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习他是如何拿下阿里等大厂的offer的呢,今天分享他的秘密武器,美团资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。

m0_63437643的博客 205

阿里资深架构师谈 Java 进阶攻略:7 大技能 +12 份进阶笔记 + 面试 150 题

以下都是阿里大牛推荐的主流技术,当你全部掌握上述的这些技术那么你就已经是 P8 级别,而且你也已经形成了自己的体系,当更加新潮的技术出来时那么你自己稍微花点时间就能吃透,毕竟那时候你已经不是以前的那个你了, 懂底层原理,知道性能特征,以及功能,想要弄懂新的技术那么也不会太吃力。希望这些能对你的架构师成长之路,起到一定的帮助,文末还准备许多架构进阶学习资料,可获取。JVM 优化,Java 程序优化,tomcat 优化,Linux 优化,SQL 优化等。堆,栈,队列,hash,链表等。单例模式,建造者模式。

web15085096641的博客 439
上一篇: 公司刚来的阿里p8,看完我构建的springboot框架,甩给我一份文档
下一篇: 阿里三面惨遭被虐,关于redis,分布式,高并发,微服务一窍不通
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值