Spring源码解析(1)
本文主要事针对spring源码作为一个简单的解析。轻松阅读,过程也好理解,希望对人有所帮助,主要介绍步骤如下所示:
- spring整体框架的介绍
- 容器的基本实现
- 配置标签的解析
- Bean的加载以及依赖注入
- SpringAOP源码解析
一 spring整体框架的介绍
1.1框架的认识
如上图(来自百度)所示,主要分为6大板块
- core部分:主要包含core,bean,context,expression language模板,该部分是spring的核心。
- DAO部分:该模块包含了spring对jdbc数据访问进行封装的所有需要的类。
- ORM部分:该部分主要是用来与orm进行交互的。是一个流行的对象关系映射的api,为orm框架提供了一个交互层。
- AOP部分:提供了一个AOP联盟标准的面向切面编程的实现。
- Web部分:对基于web的应用程序提供了一系列的支持。
- J2EE部分:提供了一些消息处理方法。
1.2搭建一个简单的入门程序
1.配置文件 application.xml
这个配置特别简单,就是声明一个bean。
2.测试
通过上面的两个步骤,我们实现了spring的一个简单任务,但是其中却实现了非常繁琐的逻辑,下面就一起看看吧。
二 容器的基本实现
我们可以将<Beans>看作一个巨大的容器,里面的bean就是这个容器中的内容。通过上述的代买我们可以发现。Spring做了两件事:
第一步是获取配置文件的所有信息,并根据配置文件找到对应的类进行实例化。
第二步是调用实例化的实例
接下来我们通过代码跟踪一步一步进行了解。
2.1获取配置文件路径的源码解析
上述很简单:首先是对传入的路径进行判空,然后再进行处理,最后将处理好的path以及类加载器进行返回。在处理的过程中,我们通过源码跟踪可以看到
到最底层是InputStreamSource类,只有一个InputStream getInputStream();接口,用于返回InputStream类型的数据。
Resource提供了许多访问文件的接口。
AbstractResource默认实现了Resource中的接口,并提供了很多方法。
AbstractFileResolvingResource对AbstractResource中的方法进行了部分重写。
ClassPathResource继承了AbstractFileResolvingResource,并且对部分接口进行了实现。
2.2解析配置文件源码分析
在这个过程中一共调用了三个方法,显示创建DefaultListableBeanFactory等一些实例,注入一些新的属性,然后再调用loadBeanDefinitions方法解析配置文件。
到上面一个步骤就是对配置文件中的标签进行详细的解析了。解析过程是逐个进行解析,然后将值进行存储。