很多人有疑问:为什么要读源码?读源码有什么用?我也一直问自己这些问题,读源码非常枯燥,工作中又用不到,慢慢的自己读源码越发现自己知识的不足,无法把知识串起来,形成知识体系。从单系统中常用的Spring源码、Mybatis、springBoot等到 分布式框技术NIO、Netty、Dubbo、SpringCloud......后续都会一一发布这些源码解析。源码阅读过程也是一个积累知识、厚积薄发的过程。
IOC、AOP是spring的2个核心特性。理解这2个特性,有助于更好的解析源码。
IOC:控制反转。把创建对象的权利交给框架,这有利于解耦。
public class PageController { public String showPage(){ PageService page = new PageService(); return ""; } }
原先PageController中使用PageService,需要自己new创建对象,使用spring后,由容器创建PageService对象,并依赖注入到PageController对象。
@component public class PageController { @Autowire private PageService pageService; public String showPage(){ return ""; } }
AOP:面向切面。将程序功能中的频繁出现或者与主业务逻辑代码相关度不高的代码抽离出来,通过切面编程的方式在想要调用的时候引入调用的思想。在实际编程中,我们通常会遇到一些交叉业务逻辑(比如:日志,事务,安全等等),这是我们就可以封装一个封面,然后注入到目标对象(具体的业务逻辑)中去。
源码解析顺序
1、配置文件读取流程
2、单例Bean的初始化过程
3、FactoryBean实例化过程
4、详解Spring Bean生命周期
5、AOP 源码解析1——配置文件读取
6、AOP 源码解析2——动态代理