Spring模块化设计:Spring功能特性如何在不同模块中组织?
很多人都在用spring开发java项目,但是配置maven依赖的时候并不能明确要配置哪些spring的jar,经常是胡乱添加一堆,编译或运行报错就继续配置jar依赖,导致spring依赖混乱,甚至下一次创建相同类型的工程时也不知道要配置哪些spring的依赖,只有拷贝,其实,当初我就是这么干的!
spring的jar包只有20个左右,每个都有相应的功能,一个jar还可能依赖了若干其他jar,所以,搞清楚它们之间的关系,配置maven依赖就可以简洁明了,下面举个例子,要在普通java工程使用spring框架,需要哪些jar呢?只要一个
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.17.RELEASE</version>
</dependency>
那要在web工程中引入spring mvc呢?也只要配置一个依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.2.17.RELEASE</version>
</dependency>
为什么可以这样配置?接下来我们以spring 3.2.17.RELEASE版本为例,介绍spring框架结构,spring 4稍有不同,将在最后介绍
spring官网给出了一张spring3的结构图
图中将spring分为5个部分:core、aop、data access、web、test,图中每个圆角矩形都对应一个jar,如果在maven中配置,所有这些jar的“groupId”都是“org.springframework”,每个jar有一个不同的“artifactId”,另外,“instrumentation”有两个jar,还有一个“spring-context-support”图中没有列出,所以spring3的jar包一共是19个
下面介绍这5个部分的jar以及依赖关系
core
core部分包含4个模块
- spring-core:依赖注入IoC与DI的最基本实现
- spring-beans:Bean工厂与bean的装配
- spring-context:spring的context上下文即IoC容器
- spring-expression:spring表达式语言
它们的完整依赖关系
因为spring-core依赖了commons-logging,而其他模块都依赖了spring-core,所以整个spring框架都依赖了commons-logging,如果有自己的日志实现如log4j,可以排除对commons-logging的依赖,没有日志实现而排除了commons-logging依赖,编译报错
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>3.2.17.RELEASE</version><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>
aop
aop部分包含4个模块
- spring-aop:面向切面编程
- spring-aspects:集成AspectJ
- spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器
- spring-instrument-tomcat:针对tomcat的instrument实现
它们的依赖关系
data access
data access部分包含5个模块
- spring-jdbc:jdbc的支持
- spring-tx:事务控制
- spring-orm:对象关系映射,集成orm框架
- spring-oxm:对象xml映射
- spring-jms:java消息服务
它们的依赖关系
web
web部分包含4个模块
- spring-web:基础web功能,如文件上传
- spring-webmvc:mvc实现
- spring-webmvc-portlet:基于portlet的mvc实现
- spring-struts:与struts的集成,不推荐,spring4不再提供
它们的依赖关系
test
test部分只有一个模块,我将spring-context-support也放在这吧
- spring-test:spring测试,提供junit与mock测试功能
- spring-context-support:spring额外支持包,比如邮件服务、视图解析等
它们的依赖关系
到这里,spring3的介绍就完了,看着这些图我相信你在maven中配置spring依赖时不会再混乱了
下面介绍spring4,与spring3结构基本相同,下面是官网给出的结构图
可以看到,图中去掉了spring3的struts,添加了messaging和websocket,其他模块保持不变,因此,spring4的jar有20个
- spring-websocket:为web应用提供的高效通信工具
- spring-messaging:用于构建基于消息的应用程序
它们的依赖关系
Spring AOP:Spring的面向切面编程,提供AOP(面向切面编程)的实现
Spring Aspects:Spring提供的对AspectJ框架的整合
Spring Beans:Spring IOC的基础实现,包含访问配置文件、创建和管理bean等。
Spring Context:在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。
Spring Context Support:Spring context的扩展支持,用于MVC方面。
Spring Core:Spring的核心工具包
Spring expression:Spring表达式语言
Spring Framework Bom:
Spring Instrument:Spring对服务器的代理接口
Spring Instrument Tomcat:Spring对tomcat连接池的集成
Spring JDBC:对JDBC 的简单封装
Spring JMS:为简化jms api的使用而做的简单封装
Spring Messaging:
Spring orm:整合第三方的orm实现,如hibernate,ibatis,jdo以及spring 的jpa实现
Spring oxm:Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换
Spring test:对JUNIT等测试框架的简单封装
Spring tx:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理。
Spring web:包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
Spring webmvc:包含SpringMVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、 Tiles、Velocity、XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。
Spring webmvc portlet:Spring MVC的增强
Spring websocket:提供 Socket通信, web端的推送功能
Spring模块化设计:Spring功能特性如何在不同模块中组织?相关推荐
- spring的设计初衷,BOP 编程伊始,依赖注入的基本概念,AOP 编程理念
Spring 的设计初衷 Spring 是为解决企业级应用开发的复杂性而设计,她可以做很多事.但归根到底支撑 Spring 的仅 仅是少许的基本理念,而所有的这些基本理念都能可以追溯到一个最根本的使命 ...
- 透彻理解Spring事务设计思想之手写实现
2019独角兽企业重金招聘Python工程师标准>>> 前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原 ...
- 【手写系列】透彻理解Spring事务设计思想之手写实现
事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Dura ...
- Spring架构设计-增强MultiActionController
http://www.iteye.com/topic/72814 Spring架构设计-增强MultiActionController 在使用Spring提供的控制器时,AbstractControl ...
- 深入浅出 Spring 架构设计
作者 | 三太子敖丙 来源 | 敖丙 前言 为什么需要Spring? 什么是Spring? 对于这样的问题,大部分人都是处于一种朦朦胧胧的状态,说的出来,但又不是完全说的出来,今天我们就以架构设计的角 ...
- Spring框架设计模式分析
在Java web的开发过程中,目前企业级应用程序采用较多的开发框架是SSH(Spring+SpringMVC+Hibernate,用SpringMVC来代替Struts).本文通过阅读Spring的 ...
- 浅入浅出Spring架构设计
本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. 前言 为什么需要Spring? 什么是Spring? 对于这样的 ...
- 【闲聊杂谈】深入理解Spring Security设计原理
1.什么是Spring Security 顾名思义,Security的意思是安全,本质上就是一个很纯粹的权限管理框架,提供认证和授权两大核心功能.在目前主流的Spring生态中的项目,说到安全框架,基 ...
- 毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)
JavaEE:Spring+SpringMVC+Mybatis项目-企业权限管理系统 首先给出项目演示地址:http://www.youngxy.top:8080/SSM/ 项目架构图: 一:功能需求 ...
最新文章
- Redux 的黑魔法
- GB0-190 考试中的知识点分布
- TestNG测试框架之TestNG.xml/YAML
- 探索ASP.NET Core中的IStartupFilter
- employee setup in Organization unit
- jdbc获取clob图片_jdbc方式读取oracle的clob字段实例
- TP-LINK路由器连接网线上网教程(租房必备)
- win10你的电脑设备需要修复_图文详解win10升级失败的解决方法
- 调试工具_Apifox for Mac(接口调试管理工具)
- Sutton 强化学习, 21 点游戏的策略蒙特卡洛值预测
- apicloud - addEventListener 接收不到 sendEvent 的解决方法
- 2. PHP 自动转义函数
- 抓包工具QPA使用教程
- C/S权限系统得到拼音和五笔的自定义函数(二)
- 1024程序员节,160元买400元图书专属优惠券,速来
- python--22 类和对象
- 如果你对未来还有点迷茫不妨来看一下,必看的软件测试指引!!!
- 渗透测试流程(基础理论)
- OpenCV之图像像素归一化
- python线程间通信
热门文章
- 密码学笔记——zip明文攻击
- [SuperM]Shell编程课堂笔记+PPT总结
- 一度的让自己变得那么懒惰,不知道后路还会如何
- 【转载】基于Linux命令行KVM虚拟机的安装配置与基本使用
- [idea] - 项目启动报错Process finished with exit code 1
- 数据可视化:浅谈热力图如何在前端实现
- Linux运维工程师的十个基本技能点
- IOS 中runtime 不可变数组__NSArray0 和__NSArrayI
- java中遍历Map的方法
- EMV内核使用中的常见问题