Java教程

spring源码的学习过程

本文主要是介绍spring源码的学习过程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近在拜读spring源码深入解析(第2版),想记录一下学习的进度。

首先spring是容器化管理对象的,这个容器放的都是对象,那么spring是如何将一个个对象放入的容器中的呢,带着这个问题然后进行学习spring的过程。

 

spring注入容器的过程是:

1.获取到配置信息,然后将生成beandefinition对象这个对象携带的是对象的所有配置信息。生成beandefinition的过程是先读取配置信息。

spring中一般使用xml配置文件配置信息,这个其中是有两种协议的,dtd和std协议,就是xml配置文件开头的东西可以代表协议的类型和规则,包括我们自定义的一些标签模式。

一般spring是有自定义的标签的,对应的也有自定义的标签处理方式,包括<bean><property>等标签都是spring自带的一些标签,自定义的一些标签有<tx:conscan>或者自定的一些。

spring也是在解析标签的时候分了两大类分别进行解析,自定义的和非自定义的。

全部解析完成之后是生成的beandefinition集合是根据classname或者是beanname来对应的,这个具体是看是否配置的别名,如果没有就是classname来匹配了。

 

2.开始首次注册进容器。获取到beandefinition之后可以进行registerBean,注册过程中是先实例化对象然后初始化,初始化的过程包括属性的注入和后置的一些处理。

spring中是存在三级缓存的,第一级缓存保存的也并非bean的对象,而是beanFactory对象,三级缓存解决了循环依赖的问题,首次注册就是实例化的过程,首先spring会尝试

从缓存中获取,如果没有发现这个对象,这个时候开始通过一级缓存中保存的beanFactory对象生成一个对象放入到二级缓存中,当然这个时候可鞥生成也不是bean这个对象,

而是代理的对象,我们也知道spring中生成的对象和我们所使用的对象不是一个概念,他生成的所有对象都是代理对象,不过这个代理对象和我们所熟知的代理也是不同的,因为

spring中使用的是BeanWrapper这个东西,方便的是之后的回收或者其他的处理所以这样来使用的,生成bean之后,这个时候开始属性的注入,注入的过程也是先尝试从缓存中获取

,从缓存中的获取的流程是首先是一级缓存,然后是二级缓存然后是三级缓存,注入属性的时候,一般是二级缓存中找不到之后从三级换从中生成一个bean来注入。

 

 

暂时学习到这里,里边涉及的判断和处理有很多没有办法一一记住和介绍,想要了解整个框架并非一朝一夕,需要不断的学习总结才能领会到设计者的想法。

这篇关于spring源码的学习过程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!