Part 1 Overview of Spring Framework
闲暇时间看看Spring的文档,一边看一边记录翻译的。英语不好……
依赖管理和命名规则
依赖管理和依赖注入是不同的事情。为了把这些好的特性(例如:依赖注入)添加到你的应用中,你需要装配所有需要的库(jar 包)并且尽可能的在编译是添加他们到你的Classpath路径下。这些依赖不是虚拟的组件,他们是被注入的。但是物理资源往往在文件系统里面。依赖管理进程涉及:找出这些资源,存储他们和把这些资源添加到classpath路径下。依赖可以是直接的( 我的应用依赖于运行的sping),或者不直接的(我的应用依赖于 commons-dbcp 它依赖于 commons-pool)。间接依赖我们也称作“传递性”,这些依赖关系是很难找到并难于管理。
如果你正在使Spring你不得不拷贝一部分jar包组成Spring的你需要的部分。为了使这些更容易,Spring被打包成独立的包集合并尽可能多的分布依赖关系,例如: 如果你不想要写一个web应用你不需要Spring的web-module。为了应用spring的库在这个引导中我们用简略的命名规则 spring-* 或者 spring-.jar,这里的 代表省略的模块名称(例如:spring-core,spring-webmvc,spring-jms,等等。)。 实际上我们使用的jar文件一帮的模块名称还要加上版本信息(例如: spring-core-4.3.8.RELEASE.jar)。
每一个Spring框架的版本都将发布到下面的地点:
- Maven 中央仓库,这是Maven默认查询的仓库,不需要使用其它特殊的配置了。许多Spring依赖的普通的库可以从中心仓库获取,Spring社区大部分选择Maven依赖管理,这样对他们也方便。 在这里的Jar包是这样的形式 spring-*-< version >.jar,maven的组名称是 org.springframework。
- 在Spring专用公共maven仓库。添加最终的GA版本,这种仓储也是发展的快照和里程碑。 jar包的名称和Maven 中央仓库的一样, 这也是一个有用的地方为了得到Spring发展版本和其他依赖Maven 中央仓库的使用。这样存储也包含一个分布压缩文件,它包含了所有Spring的jar文件被绑定在一起的使其更容易下载。
所以第一件事情你需要决定怎样管理你的依赖: 我们通常推荐使用一个自动的系统例如: Maven ,Gradle or lvy,但是你也可以手动完成它自己下载你需要的所有Jar包。
下面 你将要找到Spring工程名称的清单。更多的关于每一个包的描述,查看2.2部分“Framework Modules”:
表2.1 Spring框架 工程
GroupId | ArtifactID | Description |
---|---|---|
org.springframework | spring-aop | Proxy-based AOP support |
org.springframework | spring-aspects | AspectJ based aspects |
org.springframework | spring-beans | Beans support, including Groovy |
org.springframework | spring-context | Application context runtime,including scheduling and remoting abstractions |
···更多的 就不列出来了。
Spring 的依赖和依赖与Spring
虽然Spring提供了对于大型企业和其他外部工具的整合和支持,它有意的保持了它的强制的一个最小化依赖:你不应该寻找并下载大量的jar库为了使用简单的Spring例子。对于基础的依赖注入,这里只有一个是强制的外部依赖,并且这是为了日志(了解更多信息,看关于日志选项的描述)。
接下来我们要描述基础的步骤一个依赖于Spring应用的必须配置,首先是Maven 然后是Gradle最后是使用lvy。在这些所有的例子中,如果有任何不清楚的,参考你依赖管理工具的文档,或者看一些简单的列子code-spring它自己使用Gradle管理依赖,当他编译的时候,我的例子大多数采用Gradle或者Maven。
Maven 依赖管理
如果你使用maven作为依赖管理你甚至不需要明确的日志依赖声明。 例如: 为了创建一个应用上下文并且在应用中使用依赖注入的特性, 你的依赖关系将像这样 :
< dependencies>
< dependency>
< groupId>org.springframework < / groupId>
< artifactId>spring-context < / artifactId>
< version>4.3.8.RELEASE< /version>
< scope>runtime< / scope>
< / dependency>
< / dependencies>
就是这样,注意 scope 可以被声明成 runtime 如果你不需要编译Spring API,这是一个基本的依赖注入的经典的例子。
上面的列子适用于Maven的中央仓库。为了使用Spring的仓库(例如: 为了里程碑或开发快照),你需要配置特使的存储位置。
For Full release:
< repositories>
< repository>
< id>io.spring.repo.maven.release< /id>
< url>http://repo.spring.io/release/ < /url>
< snapshots>< enabled>false< /enabled>< /snapshots>
< /repository>
< /repositorie>
For milestones:
< repositories>
< repository>
< id>io.spring.repo.maven.milestone < /id>
< url>http://repo.spring.io/milestone/ < /url>
< snapshots>< enabled>false< /enabled>< /snapshots>
< /repository>
< /repositories>
And for snapshots:
< repositories>
< repository>
< id>io.spring.repo.maven.snapshot< /id>
< url>http://repo.spring.io/snapshot/ < /url>
< snapshots>< enabled>true< /enabled>< /snapshots>
< /repository>
< /repositories>
Maven “Bill Of Materials” Dependency
当时用Maven的时候,意外的混合使用了不同版本的spring jar库是可能的。例如:你可能找到第三方库,另一个Spring工程,依赖传递到一个交老的版本。 如果你忘记了自己明确地声明了一个直接依赖,所有不期望的问题可能引发。
为了克服这类的问题Maven支持“bill of materials”(BOM) 依赖的概念。你可以导入 spring-framework-bom 在你的dependencyManagement部分可以确保所有的Spring依赖版本是一样的(包括直接依赖和间接依赖)。
< dependencyManagement>
< dependencies>
< dependency>
< groupId>org.springframework< /groupId>
< artifactId>spring-framework-bom< /artifactId>
< version>4.3.8.RELEASE< /version>
< type>pom< /type>
< scope>import< /scope>
< /dependency>
< /dependencies>
< /dependencyManagement>
添加一个BOM的好处是你不在需要特殊的版本属性,当依赖于Sping 框架的组件
< dependencies>
< dependency>
< groupId>org.springframework< /groupId>
< artifactId>spring-context< /artifactId>
< /dependency>
< dependency>
< groupId>org.springframework< /groupId>
< artifactId>spring-web< /artifactId>
< /dependency>
< dependencies>
Gradle 依赖管理
为了在Gradle创立的系统中使用Spring仓库。包括恰当的URL在仓库部分:
repositories {
mavenCentral()
// and optionally…
maven { url “http://repo.spring.io/release” }
}
你可以恰当的改变仓库URL从/release 到/milestone 或者/snapshot。一旦仓库被配置,你可以用Gradle普通的方式声明依赖:
dependencies {
compile(“org.springframework:spring-context:4.3.8.RELEASE”)
testCompile(“org.springframework:spring-test:4.3.8.RELEASE”)
}
Ivy 依赖管理
如果你更喜欢使用lvy来管理依赖关系,这里有类似的配置选项。
为了配置lvy指向Spring 仓库添加下面的冲突解析程序到你的ivysetting.xml:
< resolvers>
< ibiblio name=”io.spring.repo.maven.release” m2compatible=”true”
root=”http://repo.spring.io/release/”/>
< /resolvers>
你适当的可以改变rootURL从/release/到/milestone/或者/snapshot/。一旦配置了, 你可以添加用普通的方式添加依赖。例如( 在ivy.xml文件中):
< dependency org=”org.springframework”
name=”spring-core” rev=”4.3.8.RELEASE” conf=”compile->runtime”/>
译者注:Distribution Zip Files 这个我确实不知道咋翻译,感觉咋翻译都是怪怪的。
分散的Zip文件
尽管使用创建一个系统它支持依赖管理系统获得spring框架式推荐的方式,但是仍然可以下载一个分散的zip文件。
分散的zips文件被发布到spring的中央仓库(这只是为了我们方便,下载他们你不需要Maven或者其他的编译系统)。
为了下载一个分散的zip,打开网页浏览器键入http://repo.spring.io/release/org/springframework/spring 然后选择一个你想要版本的合适子文件夹。分散的zip文件以 -dist.zip结尾,例如 : spring-framework-{spring-version}-RELEASE-dist.zip。 分散的也发布了milestones和snapshots。