Spring的应用场景

应用场景

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

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

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

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

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

依赖关系管理和命名约定

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

如果要使用 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)。

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

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

  • 在公共 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 :

转载于:https://my.oschina.net/u/2453016/blog/917762

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值