想系统学下 spring
工作快 5 年,用过 spring 也懂一些,但是感觉里面的源码不熟悉
想找个方向学习一下,但是不知道怎么入手
用的话是没啥问题,但是面试一问深一点,就答不上来了
看源码的话,也不知道先看哪些,再看哪些比较好
迷茫~求指教~
工作快 5 年,用过 spring 也懂一些,但是感觉里面的源码不熟悉
想找个方向学习一下,但是不知道怎么入手
用的话是没啥问题,但是面试一问深一点,就答不上来了
看源码的话,也不知道先看哪些,再看哪些比较好
迷茫~求指教~
spring 核心的初始化 与运行时 (bean 的 ioc 、di)
spring mvc 的初始化 与运行时 (或其他服务 aop)
spring 与 任意软件整合 的初始化 与运行时 (比如 mybatis)
## 思路
可以先用 mybatis 与 spring 项目共用, 但不整合的使用
然后 二者整合使用 分析下整合实现了啥功能,咋实现的
(
初始化阶段 hook 接口的执行顺序
延申到与 spring 整合的软件 对 hook 的实践
)
同理 hibernate 咋共用 。。。等等
spring 作为胶水 与很多框架都能整合
要点都是 init 、runtime 、hook
## 通用思路
阅读源码
一方面是装逼格
另一方面就是有这方面(修改源码或编写类似服务)需求
分析一个(或编写)软件需要有
大致的初始化阶段 与运行阶段
而软件为了有较好的扩展性,就会提供较多的 hook
带着目的去做,比盲目看源码有效和快速的多。
加入让你实现 spring 类似的框架,你应该怎么做? spring 有哪些地方可以再改进下,魔改下。
实际上核心的 Spring 就解决了 那么几个问题
1.IoC 容器 装配对象 让对象组件化 ,如果你不需要太复杂的功能,完全可以用一个 Map 就能轻松搞定,注意下循环依赖就好
2.AOP 提供一个切面代理,实际上就是一个代理模式,无非它是用了 CGLib 字节码之类的魔改,本质上跟你编写一个新的 Java 类去代理 是一回事,只不过它这个步骤是通过编程接口完成的,而非手工生成代理类
大多看源码的是为了面试的时候 好找个话题聊,显得你很专业,我建议直接看下极客时间的 小马哥 Spring
源码都是摘取一部分来看,并不是从头看到尾,主要是省时间,你从头看到尾,没有任何意义。
如果是应付面试跟工作也差不多了,毕竟 Spring 的核心扩展 实际上就 两个接口 BeanFactoryPostProcessor BeanPostProcessor 其余能够扩展 Spring 功能接口 大多都是从这两个接口 派生过去的, 一个是对 BeanFactory 做功能增强的,一个是给 Bean 做功能增强的。