如何真正理解Spring的核心思想 ?

本文分享如何通过深入理解Spring的依赖注入、单例等概念,通过实战重构和源码阅读,掌握Spring的设计模式,提升编码技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何真正理解Spring的核心思想 ?

原创2021-06-17 20:41·马小乎

 

什么依赖注入、单例、原型、FactoryBean、BeanPostProcessor、ApplicationListener、Resource、Order…… 实现了你再去看他的实现方式。你就知道了他为啥那样写,用那么多设计模式。

我开始的时候并不知道啥叫读Spring源码,Spring代码根本看不懂,那时候确实菜(虽然现在也菜)现在看来那时真的是刚入门Java的感觉,Maven用不好,Git也只会一点点,反射也只是会一点点。因为之前写过类似Struts的小玩意,那时候我觉得我很牛了,狂妄地觉得自己也会写框架了,我就不管三七二十一要自己实现一个于是有了

随着学习的深入我真的越学越谦虚,为啥?因为你会发现要学的东西真的多,自己完全是个渣渣,但是每次我有这样的感觉的时候我都和以前不一样了确实有进步了,这种感觉一直持续带现在。后来我惊奇地发现我居然看得懂Spring源码了,从Spring那里学到了很多设计模式,Spring真的用了很多设计模式。

实现了某个功能后我会去看Spring是这么实现的,后来发现这个功能就该按照Spring这么实现,至少就该这么实现,真的佩服极了,如果你有这个感觉的时候,恭喜你就学会了这个知识点。有很多次我都觉得我的实现方式肯定是比Spring好,但当我去使用这个功能或者是继续实现新功能的时候偶然就会醒悟,发现其中的缺陷,我就觉得当时多么蠢,于是发出感叹:就该按照Spring这么实现!然后某种写法慢慢地变成了我的习惯。

几个月后我对 IOC有了新的理解,其实挺慢的 现在看来,那段时间也是抽空学的因为要比赛

对IOC和编码有了新的理解

后来我的Git提交也慢慢规范了些。

随着学习的深入TAKETODAY/today-context已经重构了很多次了,因为Spring的设计很多次地推翻了我之前的设计,但是现在的代码还有很多是我自己设计的我还是认为我的设计好,但是这种想法不知道什么时候又会被推翻哈哈。

注意!我看Spring的设计也不是完全抄,其实随着学习的深入你会发现Spring是很复杂的(他有很多功能),只需要搞懂他的思想,说不定你的实现其实更好。Spring有很多很好用的工具类这种代码可以抄。API可以抄,调用弄方式使用习惯可以抄。学习方法命名,类命名。

如果题主感兴趣的话可以看看我写的:
https://github.com/TAKETODAY/today-context

这个项目我从2018年到现在一直在维护现在终于趋于稳定。功能也不少,很多使用习惯和Spring几乎一模一样。但是你去看源码的话除了工具类核心实现有了自己的风格。也用了不少设计模式。后来我又用同样的方式写了Aop,然后用Aop搞了个和Spring Cache差不多的切面缓存。没用多少代码就实现了,起初是单个项目TAKETODAY/today-aop 但是我后来合在一起了
tree/master/src/main/java/cn/taketoday/aop 后来又搞了SpEL tree/master/src/main/java/cn/taketoday/expression 我用的是EL表达式,这个完全是抄的,现在还没那本事完全写,只优化了部分代码。提一嘴那个类似Struts的小玩意,变成了TAKETODAY/today-web 学习了SpringMVC之后他就完全变了样。听我的一个朋友说我的代码还挺好理解的 :-p

在整个学习过程中,我用我写的这几个玩意儿重构了之前的博客系统。也就是说这玩意写出来了要用才行,不然又浪费了学习的机会。使用的时候你会发现各式各样的问题,然后你又要去改、重构、进步……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

maxiao112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值