spring学习--源码架构

spring总共大约有20个模块,由1000多个不同的文件构成。而这些组件被分别整合在六个模块集合中,分别是:

核心容器(Core Container),AOP和设备支持(Instrmentation),数据访问及集成,web,报文发送(messaging),Test.

模块结构图:

《spring学习--源码架构》

组成spring的每个模块集合或模块都可以单独存在,也可以一个或多个模块联合实现。每个模块的组成和功能如下:

1.核心容器:由beans,core,context,expression四个模块组成。

spring-beans和spring-core是spring框架的核心模块,包含了控制反转(IOC)和依赖注入(DI)。Beanfactory接口是spring中的核心接口,它是工厂模式的具体实现。Beanfactory使用控制反转对应用程序的配置和依赖性规范与应用程序代码进行了分离。但Beanfactory实例化后不会自动实例化bean,只有当bean被使用时,BeanFactory才会对该bean实例化和依赖关系的装配。

spring-context模块架构于核心模块之上,它扩展了BeanFactory,为它添加了bean生命周期控制,框架事件体系及资源加载透明化等功能。此模块还提供了许多企业级支持,如:邮件访问,远程访问,任务调度。ApplicationContext是该模块的核心接口,它是BeanFactory的超类,ApplicationContext容器实例化后会自动对所有的单例bean进行实例化和依赖关系的装配,使之处于待使用状态。

spring-expression模块是统一表达式语言(EL)的扩展模块,可以查询,管理运行中的对象,同时可以调用对象的方法,操作数组,集合等.它的语法类似于传统的EL,但提供了额外的功能(函数调用和简单字符串的模版函数)。它是基于spring产品需求而设计的,可以同IOC进行交互。

2.AOP和设备支持:由AOP,aspects,instrument三个模块组成

  spring-aop是spring另一个核心模块,是aop的主要实现模块。作为继OOP之后对程序猿影响最大的编程思想之一。

在spring中它是以JVM的动态代理技术为基础,然后设计出一系列的AOP横切实现,比如前置通知,返回通知,异常通知。同时以Pointcut接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需求进行切入。

spring-aspects模块集成自AspectJ,主要为spring aop提供多种AOP实现方法

spring-instrument模块是基于JAVA SE中的“java.lang.instrument”进行设计的,应该算是AOP的一个支援模块,主要作用是在JVM启用的时候生成一个代理类,程序猿通过代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP功能。

3.数据访问及集成:由JDBC,tx,orm,jms,oxm五个模块组成。

spring-jdbc模块是spring提供JDBC抽象框架的主要实现模块,用于简化JDBC,主要提供JDBC模板方式,关系数据库对象化方式,SimpleJdbc方式,事务管理来简化JDBC编程。

spring-tx模块是spring事务控制模块。

spring-orm模块是ORM框架支持模块,主要集成Hibernate,JPA,JDO用于资源管理,数据访问对象(DAO)的实现和事务策略。

spring-jms模块能够发送和接受信息。

spring-oxm模块主要是提供一个抽象层支持oxm(将java对象映射成xml数据或将xm数据映射成java对象)

4.web:由web,webmvc,websocket,webflux四个模块组成

spring-web模块为spring提供了最基础的web支持,主要建于核心容器之上,通过Servlet或者listeners来初始化IOC容器。

spring-webmvc模块是web-servlet中的一个模块,实现了spring mvc的web应用。

spring-websocket模块主要是与web前端的全双工通讯协议

spring-webflux是一个新的非阻塞函数式Reactive web框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性特别好。

5.报文发送:messaging模块

spring-messaging模块是从spring4加入的一个新模块,主要职责是为spring框架集成一些基础的报文传送应用。

6.Test:test模块

spring-test模块主要为测试提供支持,不需要发布到你的应用服务器或者连接到其它企业设施的情况下能够执行一些集成测试或其它测试。

各模块的依赖关系:

《spring学习--源码架构》

    原文作者:Spring Cloud
    原文地址: https://blog.csdn.net/XiaoLongFight/article/details/80590539
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞