Spring的应用场景

应用场景

上文所述的构建模块在不少的状况下使 Spring 是一个合理的选择,从资源受限的嵌入式程序到企业级的应用程序均可以使用 Spring 事务管理功能和 web 框架集成。前端

Spring 的声明式事务管理特性使 Web 应用程序拥有完整的事务,就像使用 EJB 容器管理的事务。全部的自定义业务逻辑能够用简单的 POJO 实现,用 Spring 的 IoC 容器进行管理。额外的服务包括发送电子邮件和验证,不依赖于网络层,这就可让你选择在何处执行验证规则。Spring 的 ORM 支持集成 JPA,Hibernate,JDO;例如,当使用 Hibernate,您能够继续使用现有的映射文件和 标准的 Hibernate 的 SessionFactory 配置。表单控制器将 Web 层和领域模型无缝集成,消除 ActionForms 或其余用于变换 HTTP 参数成为您的域模型值的类的须要。web

有些系统不容许你彻底切换到一个不一样的框架。但Spring Framework不强制要求你使用它的每个组件;它不是一个一揽子的解决方案。现有的使用Struts、Tapestry、JSF和其它UI框架搭建的前端能够集成到以Spring为基础的中间层,这样可使用Spring的事务功能。仅须要将业务逻辑交由ApplicationContext管理,并使用WebApplicationContext集成到web层。spring

当须要经过web服务访问现有代码,可使用Spring的Hessian-, Burlap-, Rmi- 或 JaxRpcProxyFactory 类。启用远程访问现有应用并不难。安全

Spring Framework也提供了企业级Java Bean的访问和抽象层,使得能够重用现有的POJOs,而且将它们包装成无session状态的bean,用于可伸缩、自防卫的声明式安全的应用中。网络

依赖关系管理和命名约定

依赖管理和依赖注入是不一样的概念。为了让 Spring 的这些不错的功能运用到运用程序中(好比依赖注入),须要收集全部须要的库(JAR文件),而且在运行时将它们放到类路径中,有时候编译时也须要。这些依赖不是虚拟组件的注入,而一般是在文件系统中的物理资源。依赖管理过程包括定位这些资源,存储它们并添加它们到类路径。依赖能够是直接(如个人应用程序运行时依赖于 Spring ),或者是间接(如个人应用程序依赖 commons-dbcp ,而 commons-dbcp 又依赖于 commons-pool)。间接的依赖也被称为 “transitive (传递)”,它是最难标示和管理的依赖。session

若是要使用 Spring,须要复制那些包含你须要的 Spring 功能的 jar包。为了使这个过程更加简单,Spring 被分别打包为一些模块,这些模块尽量的不相互依赖。例如,若是不想写一个 web 应用程序,你就不须要引入 Spring-web 模块。为了标记 Spring 库的模块咱们使用了速记命名约定 spring-* 或者 spring-.jar ,其中 * 表明模块的简称(好比 spring-core,spring-webmvc, spring-jms 等)。实际的jar 文件的名字,一般是用模块名字和版本号联结组成(如 spring-core-4.3.0.RELEASE.jar)。mvc

每一个 Spring Framework 发行版本将会发布到下面的位置:框架

  • Maven Central (Maven 中央库),它是 Maven 查询的默认库,不须要任何特殊的配置就能使用。许多 Spring 经常使用的依赖库也存在于Maven Central ,而且 Spring 社区的很大一部分都使用 Maven 进行依赖管理,因此这是最方便。jar 命名格式是 spring-*-<version>.jar , Maven groupId 是 org.springframework。maven

  • 在公共 Maven 仓库中有 Spring 专有的库。除了最终的 GA 版本,这个库还保存开发的快照和里程碑。除了最终的 GA 版本,这个库还保存开发的快照和里程碑,因此这是让 Spring 的开发版本使用其它部署在 Maven Central 库的一个有用的地方。该库还包含一个用于发布的 zip 文件包含全部Spring jar,方便你们下载。工具

因此,首先你要决定用什么方式管理你的依赖,一般建议你使用自动系统像 Maven, Gradle 或 Ivy, 固然你也能够下载 jar包。

Spring的依赖和依赖于Spring

虽然 Spring 提供了一个大范围的企业和其余外部工具的支持和集成,可是它尽可能将它强制的依赖关系将到最低。在简单的用例里,你无需查找并下载(即便是自动的)一大批 jar 库来使用 Spring 。基本的依赖注入只有一个外部强制性的依赖,这是用来记录日志的。

Spring 自己在编译时是使用 Gradle 来管理依赖的,大多数示例也是使用 Gradle 或 Maven。

Maven 依赖管理

若是使用的是 Maven 的依赖管理你甚至不须要明确提供日志依赖。例如,要建立一个应用程序的上下文和使用依赖注入来配置应用程序,你的Maven 依赖将看起来像这样:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.0.RELEASE</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

注意,若是你不须要编译 Spring 的API,scope 可声明为 runtime ,这一般是基本的依赖注入使用的案例。

以上的例子使用的是Maven Central 存储库。若是要使用 Spring Maven 存储库(如里程碑或开发者快照),你须要在 Maven 配置指定的存储位置。以下:

<repositories>
    <repository>
        <id>io.spring.repo.maven.release</id>
        <url>http://repo.spring.io/release/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

里程碑:

<repositories>
    <repository>
        <id>io.spring.repo.maven.milestone</id>
        <url>http://repo.spring.io/milestone/</url>
        <snapshots><enabled>false</enabled></snapshots>
    </repository>
</repositories>

以及快照:

<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" 依赖

在使用Maven时有可能出现混合使用不一样版本Spring的状况。例如,你可能发现一个第三方的库,或另外一 Spring 的项目,传递依赖较早的发布包。若是你本身忘记了显式声明一个直接依赖,各类意想不到的问题出现。

为了克服这些问题,Maven 支持 "bill of materials" (BOM) 的依赖的概念。你能够在你的 dependencyManagement 部分引入 spring-framework-bom 来确保全部 spring依赖(包括直接和传递的)是同一版本。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.3.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

使用 BOM 后,引用依赖 Spring Framework 组件后,无需指定<version> 属性。

<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 ,在 repositories 中填入适当的 URL :

相关文章
相关标签/搜索