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 :

相關文章
相關標籤/搜索