学习框架源码, 切忌不要钻牛角尖, 深入到细节的海洋无法自拔, 最终被淹没.出现瞌睡,打困,最终放弃的现象.如果是这种状态学习,永远学不会的.
一,那需要怎么学习呢?
笔者提供自己学习时的一种方式, 仅供参考.
我认为,我们学习者应该且必须清晰知道Spring到底是干吗的.很多人不了解,不熟悉,不明白就开始研究了,肯定得死.没有效率. 且Spring源码中的类名又那么长, 看一会儿就烦了.
二, Spring是干吗的呢?
什么是快了星球,我们来一起研究. 俗话说 程序猿日常工作:
1. new对象
Demo demo = new Demo();
2. set对象, 解决两个对象的依赖关系
demo.setOtherDemo(new OtherDemo());
3. 写业务代码 CRUD
insert update delete select
上方三步骤就是在没有Spring时, 老一辈程序猿每天做的事情.除了关心业务, 还需要关心对象的创建以及对象之间的依赖关系.....只想说一声..我擦勒....... 那会儿的程序猿是真的烦躁.
程序猿开发效率慢, 站在企业角度来看, 工作效率就低, 人工成本就高, 利润就少. 怎么办呢???
三, Spring团队登场
Spring团队认为程序猿应该只关注本企业的业务, 不需要关心其他的.所以站在这个角度上,Spring团队开发了Spring框架. 重点就是在解决:
1. 创建对象
2. 对象之间的依赖关系
3. 顺便提高企业开发效率,降低企业开发成本.
Spring将原本由程序猿主动创建的一个个对象及其之间的依赖关系自己托管了. 并且命名这种方式叫做: 控制反转.英文简写叫 IOC.
四: 思考
通过上述描述, 各位看官已经知道了Spring的前因后果以及由来. 最开始的Spring就像一个婴儿, 功能很简单. 随着时间的推移, 需要的变多.Spring要解决的问题很多,使命越来越大, 现在已经被广泛使用了.这都刺激这Spring团队要将Spring搞好.Spring已经成功了Java领域必备技能.对Java领域影响甚大. 这个影响是源于它的思想.
至于大伙儿肯定想呢,为什么不说AOP和Spring作为粘合剂整合了SpringMVC以及其他框架呢. 我们需要循序渐进. 在这儿先不说. 爬山不看山高才能爬的更高.不易放弃
总结:
我们只需要关注:
1. 如何创建对象
扫描指定包下的类
找到目标类
反射进行实例化
将实例化后的对象装入到一个容器中
2. 如何依赖注入,实现对象间的依赖
按类型
按名称
都是通过反射完成. 在容器中找到匹配的对象,实现注入.
3. Spring启动后程序执行流程
知道Spring的执行流程我们可以干预他的执行,达到我们的目的.
方法总结:
先宏观(大局, 整体)
理解起来简单, 花费时间少, 但能从整体把握
后微观(细节,局部)
每一个方法都是如何完成的, 这个就需要花费很多时间了. 看细节也不是什么都看,也要分清楚主次. 因为Spring在写细节代码时,会考虑到很多开发者使用框架使用起来是不是方便等,会写很多重载方法以及多种不同方式去完成同一件事情. 我们只需要关心最关键的完成方式即可. 没必要处处研究. 如果自己感觉状态不错, 可稍微看看. spring中的方法栈特别长, 有个特点是, 实际做事情的方法都是 doXXXXX(). 其他的都是意识流方法,表意图用的. 还有一个点是, spring的代码 表示逻辑的时候, 不同的逻辑换行处理. 很容易读懂. 因为程序自上而下运行.
if ()
}
else {
}
参考链接: 简单实现了一个ioc
spring-source: spring源码研究
核心用红框圈出来了. 该项目参考了B站视频: 建议去看手写框架!3小时搞懂Spring IoC核心源码_哔哩哔哩_bilibili