Spring 框架概述和体系结构

一、什么是 Spring

Spring框架是一种轻量级解决方案,是构建企业级应用程序的一站式解决方案。然而,Spring是模块化的,允许您只使用需要的部分,而不必引入其他部分。您可以使用IoC容器,上面可以使用任何web框架,但是也可以只使用Hibernate集成代码或JDBC抽象层。Spring框架支持声明式事务管理、通过RMI或web服务远程访问逻辑,以及用于持久化数据的各种选项。它提供了一个功能齐全的MVC框架,使您能够透明地将AOP集成到软件中。

1、介绍

Spring的设计是非侵入性的,这意味着您的域逻辑代码通常不依赖于框架本身。在集成层(例如数据访问层)中,将存在一些对数据访问技术和Spring库的依赖。但是,应该很容易将这些依赖项与代码库的其他部分隔离开来。
Spring框架是一个Java平台,它为开发Java应用程序提供了全面的基础设施支持。Spring处理基础设施,这样您就可以专注于您的应用程序。
Spring使您能够从“普通的旧Java对象”(pojo)构建应用程序,并将企业服务非入侵地应用于pojo。此功能适用于Java SE编程模型以及完整和部分Java EE。

2、依赖注入和控制反转

Java应用程序(一个松散的术语,它运行从受约束的嵌入式应用程序到n层的服务器端企业应用程序)通常由协作形成应用程序的对象组成。因此,应用程序中的对象相互依赖。
尽管Java平台提供了丰富的应用程序开发功能,但是它缺乏将基本构建块组织成一个连贯的整体的方法,这就把这个任务留给了架构师和开发人员。虽然可以使用设计模式,例如工厂,抽象工厂,建筑,装饰,和服务定位器组成的各种类和对象实例应用程序组成,这些模式是:最佳实践给出一个名字,有什么模式的描述,如何应用它,它解决的问题,等等。模式是形式化的
Spring Framework Inversion of Control (IoC)组件通过提供一种形式化的方法,将不同的组件组合成一个完全可用的应用程序,从而解决了这个问题。Spring框架将形式化的设计模式编码为一级对象,您可以将其集成到自己的应用程序中。许多组织和机构以这种方式使用Spring框架来设计健壮的、可维护的应用程序。

二、Spring框架体系

(本框架体系描述的是spring 4.x版本)
Spring框架由大约20个模块组成的特性组成。这些模块分为核心容器、数据访问/集成、Web、AOP(面向方面编程)、工具、消息传递和测试。
Spring4框架体系图

1、核心容器

核心容器由spring-corespring-beansspring-contextspring-context-supportspring-expression(Spring Expression Language)模块组成。

  • spring-corespring-beans 模块提供了框架的基本部分,包括控制反转(Inversion of Control, IOC)和依赖注入(Dependency Injection, DI)。BeanFactory是一个复杂的工厂模式实现。它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦,BeanFactory 容器实例化后并不会自动实例化 Bean,只有当 Bean被使用时 BeanFactory 容器才会对该 Bean 进行实例化与依赖关系的装配。
  • spring-context 上下文模块构建在corebean模块之上:它是以一种类似JNDI注册的方式访问对象。Context模块继承Beans模块的特性,并添加了国际化(例如使用资源包)、事件广播、资源加载和透明地创建上下文(例如使用Servlet容器)的支持。context模块还支持EJB、JMX和基本远程处理等JavaEE特性。ApplicationContext是Context模块的核心接口。
    spring-context-support支持将常见的第三方库集成到Spring应用程序上下文中,用于缓存(EhCache、Guava、JCache)、邮件(JavaMail)、调度(CommonJ、Quartz)和模板引擎(FreeMarker、JasperReports、Velocity)。
  • spring-expression 模块是统一表达式语言(unified expression language,unified EL)的扩展,用于在运行时查询和操作对象图。该语言支持设置和获取属性值、属性赋值、方法调用、访问数组、集合和索引的内容、逻辑和算术操作符、命名变量,以及从Spring的IoC容器按名称检索对象。还支持列表映射、选择以及常见的列表聚合。

2、AOP 和 Instrumentation

  • spring-aop 模块提供面向切面的编程实现,允许你定义方法拦截器和切入点对代码干净地解耦分离。使用源码级的元数据功能,还可以将行为信息以类似.NET属性的方式合并到代码中。
  • spring-aspects 模块集成自 AspectJ 框架, 主要是为 Spring AOP 提供多种 AOP 实现方法
  • spring-instrument 模块提供用于某些应用服务器的类instrumentation 支持和类加载器实现。
    spring-instrument-tomcat 模块用于Tomcat的Spring的instrumentation代理

3、Messaging

  • Spring Framework 4 包含spring-messaging模块,来自Spring集成项目的抽象,如Message、MessageChannel、MessageHandler等,用来提供基于消息的基础服务。该模块还包括一组用于将消息映射到方法的注解,类似于基于编程模型的Spring MVC的注解。

4、数据访问和集成

Data Access/Integration 层由JDBCORMOXMJMSTransaction 模块组成。

  • spring-jdbc 模块提供了JDBC抽象层,它消除了冗长的JDBC编码和对数据库供应商特定错误代码解析的需要。主要是提供JDBC模板方式、关系数据库对象化方式、SimpleJdbc方式、事务管理来简化JDBC编程,主要实现类是 JdbcTemplate、SimpleJdbcTemplate 以及 NamedParameterJdbcTemplate
  • spring-tx 模块支持对实现特殊接口的类和所有pojo(普通旧Java对象)进行编程式和声明式事务管理。
  • spring-orm 模块为流行的 object-relational mapping(对象-关系映射)API(包括JPA、JDO和Hibernate)提供了集成层。使用spring-orm模块,可以结合O/R映射框架与Spring提供的所有其他特性结合,如简单声明性事务管理特性。
  • spring-oxm模块提供了一个抽象层用于支持 Object/XML mapping (对象/XML映射)的实现,如JAXB、Castor、XMLBeans、JiBX和XStream。
  • spring-jms模块包含生成和消费消息的功能。从Spring4.1开始,提供了与spring-messaging模块的集成。

5、Web

Web层由spring-webspring-webmvcspring-websocketspring-webmvc-portlet模块组成。

  • spring-web 模块提供了基本的面向web的集成功能。例如多部分文件上传功能,使用Servlet listeners和面向Web的应用程序上下文初始化IoC容器。它还包含HTTP客户端和Spring远程访问web相关的部分的支持。
  • spring-webmvc 模块(也称为Web servlet模块)包含Spring的模型-视图-控制器(model-view-controller,MVC)和Web应用程序的REST Web服务实现。Spring的MVC框架提供了domain model(域模型)代码和web form之间的完全分离,并集成了Spring框架的所有其他特性。
  • spring-websocket 模块主要是与 Web 前端的全双工通讯的协议。
  • spring-webmvc-portlet 模块(也称为Web-Portlet模块)提供了要在Portlet环境中使用的MVC实现,并反映了基于servlet的spring-webmvc模块的功能。(该模块在Spring5中移除)
  • spring-webflux 是一个新的非堵塞函数式 Reactive Web 框架, 可以用来建立异步的、非阻塞、事件驱动的服务,并且扩展性非常好。(Spring5新模块)

6、Test

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

三、Spring 包之间的依赖关系

1. 包列表

  • spring-core 核心工具类
  • spring-beans bean支持
  • spring-expression Spring表达式语言(SpEL)
  • spring-aop 基于代理的AOP支持
  • spring-aspects 基于AspectJ方面
  • spring-context 应用程序上下文运行时,包括调度和远程抽象
  • spring-context-support 支持将公共第三方库集成到Spring应用程序上下文中的类
  • spring-messaging 支持消息传递体系结构和协议
  • spring-instrument 用于JVM引导的插装代理
  • spring-instrument-tomcat Tomcat的插装代理
  • spring-jdbc JDBC支持包,包括数据源设置和JDBC访问支持
  • spring-tx 事务基础设施,包括DAO支持和JCA集成
  • spring-orm 对象/关系映射,包括JPA和Hibernate支持
  • spring-oxm Object/XML Mipmg 对象/ XML映射
  • spring-jms JMS支持包,包括发送/接收JMS消息的帮助类
  • spring-test 支持单元测试和集成测试Spring组件
  • spring-web 基本的web支持,包括web客户机和基于web的远程处理
  • spring-webmvc Servlet栈的基于http的模型-视图-控制器和REST端点
  • spring-websocket WebSocket和SockJS基础架构,包括STOMP消息传递支持
  • spring-webmvc-portlet 要在Portlet环境中使用的MVC实现

2. 依赖关系图

spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging,如果有自己的日志实现如log4j,可以排除对commons-logging的依赖,没有日志实现而排除了commons-logging依赖,编译报错

下图是spring4的jar之间的直接依赖图,在maven中配置spring依赖时不会再混乱了,简洁配置

Spring4 jar包直接依赖图

转载于:https://my.oschina.net/morgan412/blog/2988174

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值