Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)
依赖管理(Dependency Management)和命名规范(Naming Conventions)
依赖管理和依赖注入(dependency injection)是有区别的。为了将Spring的优秀特性(如依赖注入)带到你的应用中,需要在编译时或运行时部署所需要的库(jar包)。这些依赖不是虚拟的构件,而是文件系统上的物理资源。依赖管理的过程涉及到定位这些资源、存储资源、加入classpath。依赖可以是直接的(例如Spring运行时),也可以是间接的(例如commons-dbcp)。间接的依赖(也可以说是transitive)很难标识和管理。
如果你要使用Spring,首先需要拷贝相应的jar包。为了方便使用,Spring将不同的依赖按模块进行了封装,例如,如果你正在开发的是一个非web应用,可以不必引用sping-web模块。可以通过命名规范spring-* 或 spring-*.jar引用sping库。*表示模块的简称(例如spring-core,spring-webmvc,spring-jms)。实际的jar包后面一般会有版本串号(例如spring-core-4.1.1.RELEASE.jar)。
对于依赖的管理,建议使用Maven,Gradle 或 Ivy管理,当然jar包还是需要手动自己下载的。
Spring依赖
虽然Spring为大范围的企业应用和外部工具提供了集成和支持,但强制依赖很少(例如,没必要为了开发一个简单的Spirng用例,而去定位和下载大量的jar包)。在其中的依赖注入中,只有一个外部依赖是强制的,即日志(log)。
接下来将会概述Spring的配置步骤。不管在什么场景下,如有不清楚的问题,请参考依赖管理文档,或者查看Spring样例代码。Spring本身是使用Gradle来管理依赖,但后文将会使用Gradle或者Maven。
1.Maven依赖管理
如果你使用Maven进行依赖管理,不需要显式提供日志依赖。例如,如果要创建应用上下文(context),则Maven的依赖注入配置如下:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.1.RELEASE</version>
<scope>runtime</scope>
</dependency>
</dependencies>
需要注意的是,如果不想与Spring API一起编译,则scopes可以声明为runtime。
使用Spring Maven资源还需要在配置文件中指定资源位置。
<repositories>
<repository>
<id>io.spring.repo.maven.release</id>
<url>http://repo.spring.io/release/</url>
<snapshots><enabled>false</enabled></snapshots>
</repository>
</repositories>
1.1 Bill Of Materials
有时我们会在不经意间引用不同版本的jar包。例如,有时从第三方或其它项目导入不同版本的jar包,如果不显式声明你的直接依赖,可能会产生很多诡异的问题。
为了解决此问题,Maven支持BOM(bill of materials)的概念。可以在dependencyManagement里面导入spring-framework-bom,以确保所有的依赖(包括直接的和间接的)引用的都是同一版本。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.1.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
使用BOM的另一好处是不用指定版本号。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependencies>
Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)的更多相关文章
- Gradle系列教程之依赖管理(转)
转自Lippi-浮生志 :http://ezlippi.com/blog/2015/05/gradle-dependency-management.html 这一章我将介绍Gradle对依赖管理的强大 ...
- Gradle系列教程之依赖管理
这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定位不同类型仓库.依赖管理看起来很容易,但是当出现依赖解析冲突时就会很棘手,复杂的依赖关系可能导致构建中依赖一个库的多个版本.Gradle ...
- Spring mvc 4系列教程(三)—— Spring4.X的新特性
1.Spring4.0的新特性 从2004年Spring的1.0发布后,后面又发布了很多重要的版本:Spring2.0提供了XML命令空间和AspectJ的支持:Spring2.5提出了注解驱动(an ...
- Spring mvc 4系列教程(一)
一.Spring框架概览 Spring框架是一种轻量级.一站式解决企业级应用的解决方案.不仅如此,Spring的模块化的特点,可以使你只引用所需要的部分,而无需引用全部.你可以使用控制反转容器(IoC ...
- Android Studio系列教程二--基本设置与运行
Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...
- WPF系列教程——(二)使用Prism实现MVVM设计模式 - 简书
原文:WPF系列教程--(二)使用Prism实现MVVM设计模式 - 简书 本文假设你已经知道MVVM设计模式是什么,所以直接进入正题,今天我们就用Prism来实现WPF的MVVM设计模式,百度上关于 ...
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- C#微信公众号开发系列教程二(新手接入指南)
http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...
- Fastify 系列教程二 (中间件、钩子函数和装饰器)
Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) 中间件 Fastify 提供了与 Express 和 Restify ...
随机推荐
- 为WinEdt自定义XeLatex快捷键
没有彻底抛弃Windows很重要的一方面原因,WinEdt + Sumatra PDF对LaTeX支持的太好了(自动补全,反向搜索),而且当遇到复杂公式的时候,mathtype也能帮上大忙. 我一直用 ...
- Task Parallelism
The Task Parallel Library (TPL) is based on the concept of a task, which represents an asynchronous ...
- mysql问题处理记录
1.使用 navicate 导出 csv 文件用 excel 打开乱码 由于excel默认编码是gbk,而navicate导出数据默认编码是utf-8,因此... 解决办法: 使用WPS打开文件,然后 ...
- 从MS Word到Windows Live Writer
在做笔记的时候,喜欢使用Word进行排版及插入图片,但是当将笔记发布的时候,一般的网站是不支持直接将Word中的图片进行上传的,此时使用Windows Live Writer是一个不错的选择. 可是, ...
- SRM474
250pt 题意:在一个N维的空间里,有一个人开始在原点,现在给出N<=50个指令序列,每个指令序列为某一维+1或者减一,问是否经过某个点至少2次. 思路:操作很小,直接模拟判断即可 code: ...
- Android-Recyclerview-使用分割线
由于Recyclerview是在 android.support.v7.widget.包 RecyclerView,所以需要导Recycler库: 导Recycler库: 选择项目,右键--> ...
- Xcode一些好用的插件,以及这些插件的管理器
最近从xcode6.4升级到xcode7,发现以前所有的插件都失效了,如果要安装,需要重新去一个个下载.安装,很麻烦. 于是,转来了这篇博文,亲自测试,发现很好用...... 地址:http://11 ...
- Aggregate类型以及值初始化
引言 在C++中,POD是一个极其重要的概念.要理解POD类型,我们首先需要理解Aggregate类型.下文结合stackoverflow上的高票回答将对Aggregate类型做一个全面的解读. 对于 ...
- node.js实现WebSocket
最近在学习“HTML5游戏开发实战”,其中第8章内容是使用WebSocket来构建多人游戏---<你画我猜>.然而在实现过程中,却一直出错: 客户端请求时,服务器端会报错并终止: 而浏览器 ...
- 有标号的DAG图计数1~4
前言 我什么都不会,菜的被关了起来. 有标号的DAG图I Solution 考虑递推,设\(f_i\)表示i个点的答案,显然这个东西是可以组合数+容斥递推? 设\(f_i\)表示i个点的答案,我们考虑 ...