很多人都在用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个模块

  1. spring-core:依赖注入IoC与DI的最基本实现
  2. spring-beans:Bean工厂与bean的装配
  3. spring-context:spring的context上下文即IoC容器
  4. 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个模块

  1. spring-aop:面向切面编程
  2. spring-aspects:集成AspectJ
  3. spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器
  4. spring-instrument-tomcat:针对tomcat的instrument实现

  它们的依赖关系

data access

  data access部分包含5个模块

  1. spring-jdbc:jdbc的支持
  2. spring-tx:事务控制
  3. spring-orm:对象关系映射,集成orm框架
  4. spring-oxm:对象xml映射
  5. spring-jms:java消息服务

  它们的依赖关系

web

  web部分包含4个模块

  1. spring-web:基础web功能,如文件上传
  2. spring-webmvc:mvc实现
  3. spring-webmvc-portlet:基于portlet的mvc实现
  4. spring-struts:与struts的集成,不推荐,spring4不再提供

  它们的依赖关系

test

  test部分只有一个模块,我将spring-context-support也放在这吧

  1. spring-test:spring测试,提供junit与mock测试功能
  2. spring-context-support:spring额外支持包,比如邮件服务、视图解析等

  它们的依赖关系

  到这里,spring3的介绍就完了,看着这些图我相信你在maven中配置spring依赖时不会再混乱了

  下面介绍spring4,与spring3结构基本相同,下面是官网给出的结构图

  可以看到,图中去掉了spring3的struts,添加了messaging和websocket,其他模块保持不变,因此,spring4的jar有20个

  1. spring-websocket:为web应用提供的高效通信工具
  2. 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功能特性如何在不同模块中组织?相关推荐

  1. spring的设计初衷,BOP 编程伊始,依赖注入的基本概念,AOP 编程理念

    Spring 的设计初衷 Spring 是为解决企业级应用开发的复杂性而设计,她可以做很多事.但归根到底支撑 Spring 的仅 仅是少许的基本理念,而所有的这些基本理念都能可以追溯到一个最根本的使命 ...

  2. 透彻理解Spring事务设计思想之手写实现

    2019独角兽企业重金招聘Python工程师标准>>> 前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原 ...

  3. 【手写系列】透彻理解Spring事务设计思想之手写实现

    事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Dura ...

  4. Spring架构设计-增强MultiActionController

    http://www.iteye.com/topic/72814 Spring架构设计-增强MultiActionController 在使用Spring提供的控制器时,AbstractControl ...

  5. 深入浅出 Spring 架构设计

    作者 | 三太子敖丙 来源 | 敖丙 前言 为什么需要Spring? 什么是Spring? 对于这样的问题,大部分人都是处于一种朦朦胧胧的状态,说的出来,但又不是完全说的出来,今天我们就以架构设计的角 ...

  6. Spring框架设计模式分析

    在Java web的开发过程中,目前企业级应用程序采用较多的开发框架是SSH(Spring+SpringMVC+Hibernate,用SpringMVC来代替Struts).本文通过阅读Spring的 ...

  7. 浅入浅出Spring架构设计

    本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的系列文章. 前言 为什么需要Spring? 什么是Spring? 对于这样的 ...

  8. 【闲聊杂谈】深入理解Spring Security设计原理

    1.什么是Spring Security 顾名思义,Security的意思是安全,本质上就是一个很纯粹的权限管理框架,提供认证和授权两大核心功能.在目前主流的Spring生态中的项目,说到安全框架,基 ...

  9. 毕业设计-课程设计-Spring+SpringMVC+Mybatis项目—企业权限管理系统(1)

    JavaEE:Spring+SpringMVC+Mybatis项目-企业权限管理系统 首先给出项目演示地址:http://www.youngxy.top:8080/SSM/ 项目架构图: 一:功能需求 ...

最新文章

  1. Redux 的黑魔法
  2. GB0-190 考试中的知识点分布
  3. TestNG测试框架之TestNG.xml/YAML
  4. 探索ASP.NET Core中的IStartupFilter
  5. employee setup in Organization unit
  6. jdbc获取clob图片_jdbc方式读取oracle的clob字段实例
  7. TP-LINK路由器连接网线上网教程(租房必备)
  8. win10你的电脑设备需要修复_图文详解win10升级失败的解决方法
  9. 调试工具_Apifox for Mac(接口调试管理工具)
  10. Sutton 强化学习, 21 点游戏的策略蒙特卡洛值预测
  11. apicloud - addEventListener 接收不到 sendEvent 的解决方法
  12. 2. PHP 自动转义函数
  13. 抓包工具QPA使用教程
  14. C/S权限系统得到拼音和五笔的自定义函数(二)
  15. 1024程序员节,160元买400元图书专属优惠券,速来
  16. python--22 类和对象
  17. 如果你对未来还有点迷茫不妨来看一下,必看的软件测试指引!!!
  18. 渗透测试流程(基础理论)
  19. OpenCV之图像像素归一化
  20. python线程间通信

热门文章

  1. 密码学笔记——zip明文攻击
  2. [SuperM]Shell编程课堂笔记+PPT总结
  3. 一度的让自己变得那么懒惰,不知道后路还会如何
  4. 【转载】基于Linux命令行KVM虚拟机的安装配置与基本使用
  5. [idea] - 项目启动报错Process finished with exit code 1
  6. 数据可视化:浅谈热力图如何在前端实现
  7. Linux运维工程师的十个基本技能点
  8. IOS 中runtime 不可变数组__NSArray0 和__NSArrayI
  9. java中遍历Map的方法
  10. EMV内核使用中的常见问题