浅谈对SpringFramework的认识
Spring Framework,作为⼀个应⽤框架,官⽅的介绍如下:
The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform. A key element of Spring is infrastructural support at the application level: Spring focuses on the "plumbing" of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments.
在开发中,Spring框架从程序员⼿中接管了对象的创建,Spring根据配置⽂件或者扫描注解,得到类、组件之间的关系,并创建对象进⾏注⼊,这个过程不需要程序员⼿动创建并赋值,从⽽降低了耦合性,开发的时候也不需要理会这些与功能代码实现⽆关的部分,这就是DI/IOC(依赖注⼊/控制反转)。基于DI/IOC,Spring框架的不同模块提供了各种功能,为应⽤提供了AOP功能、持久层的⽀持,为Web层提供了SpringMVC以及与其他框架的整合使⽤等等。(这特么不是上⾯的翻译啊啊啊)
这段时间正在学习Spring源码,浅谈⼀下我对Spring的认识。参考资料主要为Spring官⽅⽂档、《深⼊分析Java Web技术内幕》《Spring源码深度解析》,部分内容借鉴书中原⽂。
Spring中的主要组件如图:
Spring中的核⼼容器中有四个部分,核⼼组件是其中的Beans、Core和Context组件,⾄于SpEL不太了解o(* ̄▽ ̄*)o 。如果没有Core Container 核⼼容器的⽀持,就不会有上层的AOP、Web等特性功能。
三个组件中,Beans组件可以说是⽐较核⼼的,Spring框架将对象之间的依赖关系转⽤配置⽂件、注解来配置,注⼊关系通过IOC容器来管理,⽽IOC容器中管理的实体就是被Bean包裹的对象。Bean就是被包装之后的Java对象,由Spring框架创建和维护。
Context组件是Bean的上下⽂,是Bean的⽣存环境,⽤于建⽴和维护Bean之间的关系,所以说Context其实是Bean关系的集合,这个关系的集合就叫做IOC容器。
⽽Core组件,就是发现、建⽴、维护Bean之间的关系所需要的⼀系列的⼯具类(Util)。
⼀、Beans组件
Beans组件主要解决了Bean的定义、创建和解析,实现在org.springframework.beans包中。
Bean的创建是典型的⼯⼚模式,顶级接⼝是BeanFactory,简单的继承层次如下:
BeanFactory有三个⼦类接⼝,ListableBeanFactory(可列表的)、HierarchicalBeanFactory(可继承的)、AutowireCapableBeanFactory(可⾃动装备的),三者分别有不同的使⽤场合,⽽BeanFactory的默认实现类是DefaultListableBeanFactory,它实现了所有的接⼝。
Bean的定义主要由BeanDefinition描述。当Spring对配置⽂件中的Bean进⾏成功解析或者对注解的Bean解析完成后,其在Spring内部转换成BeanDefinition对象,此后所有的操作都是对这个对象进⾏的。UML图如下:
spring framework是什么软件Bean的解析⽐较复杂,主要有对配置⽂件的解析和对注解的解析,配置⽂件解析过程主要由以下类完成:
⼆、Context组件
Context组件提供Spring的⼀个运⾏时环境,在t包实现。ApplicationContext是Context的顶级接⼝,它继承了六个接⼝,主要是扩展了Context:
可以看出,ApplicationContext继承了BeanFactory,使得其有创建Bean的功能,这也间接说明了Spring容器中运⾏的实体是Bean。ApplicationContext继承了ResourceLoader接⼝,意味着ApplicationContext可以访问外部资源。
ApplicationContext两个⼦类接⼝分别是ConfigurableApplicationContext和WebApplicationContext,根据字⾯意思便可理解其⽤途。
⼀般来说,ApplicationContext有⼀下⼏个作⽤:
1.标识⼀个应⽤环境
2.利⽤BeanFactory创建Bean对象
3.保存对象关系表
4.能捕获各种事件
Context作为Spring的IOC容器,整合了Spring的⼤部分功能的基础。
三、Core组件
Core组件提供了很多⽐较重要的关键类,⽐如资源的访问。这⾥暂时不想写了,留坑以后填。
写累了,下篇再接着写IOC容器的⼯作过程吧,BeanFactory的创建过程、Bean及其关系⽹的创建、IOC容器的扩展点等等。洗洗睡了_(:зゝ∠)_
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论