bg:25届毕业生,目前在实习,记录一下学习成长过程中的感悟。
个人心得:如果没有源码阅读经验的新手在刚接触源码的时候很容易晕头转向。网上关于Spring源码的资料和视频很多,但是都很杂,而且每个人的痛点都不一样,就需要从各个资料中去整合。这个过程。。。非常的痛苦。下面就具体说明一下我的学习方式和个人理解,理解有误的地方欢迎指正。
Spring IOC流程
根据流程图可以看IOC容器创建Bean对象可以大致分为三步:
1. 读取BeanDefinition(Bean定义信息)
2. 实例化(创建Bean)
3. 初始化(填充Bean)
读取BeanDefinition
Spring两大容器BeanFactory和ApplicationContext我就不介绍了,这里详细介绍一下ApplicationContext的实现子类AnnotationConfigApplicationContext(注解)以及对比一下ClassPathXmlApplicationContext(XML)。
两个类的构造函数都调用了refresh()方法,该方法继承于AbstractApplicationContext,也是容器管理Bean的主要方法。Spring要想管理Bean,首先要先new一个BeanFactory容器,依托这个容器去管理。这两个类第一个不同的地方就在于容器创建时间,AnnotationConfigApplicationContext在调用this()无参构造的同时会调用父类GenericApplicationContext的无参构造new一个DefaultLi