spring4体系架构

一、Spring体系架构

 上面的图,我是在(4.3.27.RELEASE)版本中找到的。地址:https://docs.spring.io/spring/docs/4.3.27.RELEASE/spring-framework-reference/htmlsingle/#overview-modules

1、Test(测试)

spring-test模块支持单元测试、集成JUnit或TestNG组件。它提供了Spring Applicationcontext的一致加载和这些上下文的缓存。它还提供了模拟对象,您可以使用这些对象单独测试代码。

2、Core Container(核心容器)

包含spring-core,spring-beans,spring-context,spring-context-support,和spring-expression模块。

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

spring-context模块在核心模块之上,扩展了BeanFactory,添加了Bean生命周期控制、框架事件体系以及资源加载透明化等功能。此外,该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等。该模块的核心接口ApplicationContext,是BaenFactory的子类,与BeanFactory不同,ApplicationContext容器实例化后会自动对所有的单实例Bean进行实例化和依赖关系的装配。

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

3、AOP(aspect-oriented programming:面向切面编程)

spring-aop模块时面向切面编程实现,通过预编译方式运行期动态代理实现程序功能统一维护的一种技术。AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存)。

底层使用代理机制:
* JDK动态代理:对实现了接口的类才能生成代理。
* CGLIB动态代理:对没有实现接口的类产生代理.产生这个类的子类对象。

4、Aspects

spring-aspects模块集成aspectJ框架。

AspectJ是一个面向切面框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。

5、Instrumentation(设备支持)

spring-instrument模块提供类检测支持和类加载器实现,用于某些应用服务器。spring-instrument-tomcat模块包含spring用于tomcat的instrumentation代理。

6、Messaging(消息传递)

spring-messaging模块(spring4版本)具有来自Spring集成项目(如Message、MessageChannel、MessageHandler等)的关键抽象,以作为基于消息的应用程序的基础。该模块还包括一组用于将消息映射到方法的注释,类似于基于Spring MVC注解的编程模型。 

7、Data Access/Integration(数据访问/集成)

 由spring-jdbc、spring-orm、spring-oxm,spring-jms和spring-tx5个模块组成。

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

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

spring-oxm模块主要提供一个抽象层以支撑OXM(OXM是Object-to-XML-Mapping的缩写,它是一个O/M-mapper,将java对象映射成XML数据,或者将XML数据映射成java对象),例如:JAXB,Castor,XMLBeans,JiBX和XStream等。

spring-jms模块(Java Messaging Service)能够发送和接受信息,自Spring Framework4.1以后,他还提供了对spring-messaging模块的支撑。

spring-tx模块是Spring JDBC事务控制实现模块。使用Spring框架,它对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层;但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。事务以业务逻辑为基础,一个完整的业务应该对应业务层里的一个方法;如果业务操作失败,则整个事务回滚。所以,事务控制是绝对应该放在业务层的;但是,持久层的设计则应该遵循一个很重要的原则:保证操作的原子性,即持久层里的每个方法都应该是不可以分割的。所以,在使用SpringJDBC事务控制时,应该注意其特殊性。

8、Web()

包含spring-web,spring-webmvc,spring-websocket,和spring-webmvc-portlet模块。

spring-web模块为Spring提供了最基础Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器,也包含一些与Web相关的支持。

spring-webmvc模块(也称为Web Servlet模块)包含spring的model-view-controller(MVC)和用于Web应用程序的rest web服务实现。Spring MVC框架提供了域模型代码和web表单之间的清晰分离,并与Spring框架的所有其他特性集成。

spring-websocket模块为web应用程序中基于websocket的客户端和服务器之间的双向通信提供了全面的支持。它与JSR-356、Java WebSocket API兼容,此外还提供了基于SockJS的回退选项(即WebSocket仿真),供尚未支持WebSocket协议(如Internet Explorer<10)的浏览器使用。

spring-webmvc-portlet模块(也称为web-portlet模块)提供了要在Portlet环境中使用的MVC实现,并反映了基于Servlet的spring webmvc模块的功能。

原文地址:https://www.cnblogs.com/wangymd/p/13150726.html