spring 簡介(譯)

文檔地址: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#overview-getting-started-with-spring ##1.啓動 spring框架是一個輕量級的問題方案,能夠爲你的企業級應用搭建提供一站式服務;並且,spring仍是模塊化的,容許你只使用你須要哪些部分,而沒必要所有引用.你能夠在任何web框架之上使用ioc容器,不過你也能夠只是用hibernate聚合部分和jdbc抽象層.spring框架還支聲明式的事務管理,容許你經過RMI或webservice來訪問你的業務邏輯層,並提供各類數據持久化技術(jpa,hibernate,mongodb,Gemfire).他提供了一個徹底特性的mvc框架,並容許你透明地將aop聚合到你的軟件中; spring是非侵入型設計,意味着你的領域業務代碼基本上不會依賴於框架自己;在你的聚合層(例如數據訪問層),一些數據訪問技術的依賴和一些spring類庫仍是存在的;然而,這些能夠輕易的從你代碼庫分離; 你可使用start.spring.io來產生一個簡單的項目或經過使用 "Getting Started" 網頁中的 "Getting Started Building a RESTful Web Service "這一章節;爲了便於你消化,這些指導都是任務專一型的,而且他們大部分都是基於spring-boot;他可能還包含一些其餘的能夠幫助你解決特定問題的項目; ##2.介紹spring架構 spring框架是一個爲java項目提供普遍基礎設施(基層服務)支撐的java平臺;spring處理了這些基層服務,因此你能夠集中到你的應用上; spring容許你經過pojos(簡單java對象)來建立項目,並將企業服務非侵入式的注入到pojo中;它適用於徹底的javase編程模式,部分或所有javaEE; 下面是一些你可使用spring平臺開發受益的例子;html

  • 1.可使一個方法在數據庫事務中執行而沒必要關注java事務APIS
  • 2.可使java本地方法包裝成遠程過程,沒必要處理遠程APIs
  • 3.使java本地方法成爲管理操做器而沒必要處理JMX api;
  • 4.使本地方法成爲消息處理器;沒必要處理JMS apis;

###2.1依賴注入和控制反轉(DI and IOC) 一個java應用,是一個有着各類限制,嵌入了N層一個術語概念;服務端的java企業應用,典型由各類對象以合適的方式組成;這些對象一般都相互依賴,耦合嚴重; 儘管java平臺提供了各類應用開發的便利功能,但它無力將這些基礎組件有機整合,這些任務留給裏架構師和開發者;儘管你可使用各類設計模式,好比工廠模式(Factory),抽象工廠模式(Abstract Factory),構造者模式(builder),裝飾器模式(Decorator),服務定位器模式(Service Locator)等來處理各類類和java對象實例來組裝到應用中;然迄今爲止,這些模式大都如此:給一個符合定義的最好實踐,描述好模式的怎麼工做,在哪裏調用,在哪些問題中可使用它;模式只是形式化的最好作法,然你還得在應用中實現它;前端

spring ioc解決了這個困擾---經過提供了正式的方式去把各個獨立的組件聚合到一個將要使用它們去工做的應用中;spring打敗了形式化的設計模式,使她成爲了聚合應用的首選項;各類組織和機構使用spring的ioc來構建健壯的,可維護的應用;	 背景: '問題在於,控制模塊要注入呢'這個是關於控制反轉的問題,後來從新定義了這個原則使其更加具備自適性,並帶來了依賴注入;

###2.2模塊 spring由20多個模塊組成;這些模塊被分組成核心容器,數據訪問/整合,web,aop,基礎設施,通訊,測試等部分,圖以下; 輸入圖片說明java

data Access/Integration:jdbc,orm,oxm,jms,transcations;
	 web:websocket,servlet,web,Portlet
	 獨立層組:aop,aspects,instrumentation,messaging
	 核心容器(Core Container):Beans,core,context,SpEL,
	 Test;

列表中的提供的許多可得到的模塊插件(根據其名稱提供不一樣的建議);在依賴管理工具中這些插件經過插件id進行管理;ios

###2.2.1核心容器web

核心容器有spring-core,spring-beans(spring beans管理器),spring-context-support(spring上下文支持),spring-context,spring-expression(spring表達式語言)等模塊;spring

spring-core and spring-beans提供了架構的基礎,包括了控制反轉(IOC)和依賴注入特性;beanFactory是工廠模式的精妙實現;它去掉了單例編程,並使你在實際的編程邏輯中解耦這些依賴的配置和說明;mongodb

上下文模塊基於spring core and beans 模塊提供的堅強的基礎:提供了一種像JNDI(java naming definition Interface 命名目錄接口)註冊的方式來訪問對象的方法.上下文模塊繼承了beans模塊的功能,並對國際化(internationalization ),事件傳播(Event propagation),資源加載而且經過上下文顯式建立,例如,一個servlet容器.上下文模塊也支持java EE特性,好比EJB,JMX,基礎遠程.應用上下文接口是上下文模塊的焦點;spring上下文支持模塊能夠支持聚合一些第三方類庫;好比緩存(Ehcache,Guava,JCache),通訊(JavaMail),定時任務(Quartz,CommonJ)和模板引擎(FreeMarker,JasperReports,Velocity);數據庫

這個spring-expressin模塊提供了一個強有力的語言在運行時來操做對象圖;它是jsp2.1的EL語言的擴展;該語言支持獲取和設置屬性值,屬性分配,方法調用;訪問數組,集合,索引器的內容;邏輯和算數操做,命名變量,ioc容器中變量命名檢索;它還支持列表投影(projection jpa的)和選擇,以及常見的列表聚合; ###2.2.2 AOP和探針(instrument,也有叫儀器的)express

spring-aop模塊提供了一個聯盟標準的面向切面編程的實現;例如,它可讓你定義方法攔截器和切入點,以便使其清晰的和你的功能代碼解耦;使用資源級別的元數據的功能,你能夠將動做信息像操做.Net的屬性同樣合併到你的代碼中.編程

獨立的spring-aspects模塊提供了AspectJ的聚合;

spring-instrument模塊提供了特定應用容器的類聚合支持和加載器實現;

###2.2.3 通訊

spring-massaging是spring集成項目的關鍵抽象,包括消息,消息頻道,消息處理器,以及其餘的做爲消息相關應用的基礎;該模塊有一個大堆的方法級消息註解,就如同springmvc註解同樣 ###2.2.4 數據訪問和聚合

有jdbc,ORM,OXM,JMS和事務模塊;
	Spring JDBC模塊提供了一個抽象層,不須要進行繁瑣的JDBC編碼和數據庫供應商特定錯誤代碼解析;
	spring-tx模塊對實現特定接口的類和全部的pojos提供了編程的和申明式的事務管理;
	spring-orm模塊提供了對ORM數據庫APIs的映射,包括JPA,JDO,和Hibernate.經過spring-orm模塊你可使用這些spring提供的ORM框架的全部特性;例如上文提過的簡單的申明式事務管理;
	spring-oxm模塊提供了實現Object/XML mapping的框架,好比JAXB,Castor,XMLBeans,JiBx and XStream;
	spring-JMS提供的功能爲生成和消費消息;spring4.1之後,它提供了對spring消息模塊的聚合;

###2.2.5 web web層包括spring-web,spring-webmvc,spring-websocket,spring-webmvc-portlet; spring-web模塊提供了基本的web方向編程的功能,好比上傳複合文件,經過servlet監聽器來啓動ioc容器,提供了一個面向web的應用上下文;

spring-webmvc模塊包含了spring的mvc以及對web應用rest服務的實現;spring的mvc實現了領域模型代碼和web表單的清晰隔離,並能夠聚合了其餘全部的spring功能

spring-webmvc-portlet模塊(也被稱爲web-portlet模塊)提供了在Portlet環境中mvc的實現並反射調用spring-mvc模塊的功能;

###2.2.6 Test spring測試模塊經過Junit和TestNG提供了單元測試和spring組件集成測試;他提供了穩定的spring上下文的加載和存儲;它還提供了模擬對象,你可單獨的測試你的代碼;

###2.3使用場景(Usage scenarios)

上文描述的功能塊是的spring在許多場景成爲一個合理的選擇;從在資源受限的設備上運行的嵌入式應用,到徹底成熟的使用了spring事務管理和web框架聚合的企業級應用; - 金手指1:Typical full-fledged Spring web application 典型的成熟的spring web 應用 輸入圖片說明

spring 聲明式的事務管理使web應用更具備事務性;就像你使用EJB的容器事務管理同樣;你的全部客戶端業務邏輯能夠經過簡單的java bean來實現,並經過ioc容器來管理.其餘的服務包括郵件發送和驗證是獨立於web層的,web層會讓你選擇在哪執行驗證規則.spring orm 支持集成了jpa,hibernate,jdo.例如,當你使用hibernate時,你能夠繼續使用已經存在的映射文件和標準的bibernate事務工廠配置.表單控制器無縫將領域模型和web層集成,無需ActionForm類或其餘類將http請求參數翻譯成你的領域模型對象;

###金手指2:spring middle-tier using a third-party web framework(spring整合第三方框架) 輸入圖片說明 一些狀況下不容許你徹底轉向另外一種架構.spring不會強迫你使用它的全部東西,它不是一個全有或全無的方案.已存在的前端能夠經過struts,Tapestry,JSF或者其餘ui框架建立的並被spring整合;spring做爲中間層可使用它的事務處理功能.你只須要經過上下文(ApplicationContext)鏈接你的業務邏輯,並經過web上下文(WebApplicationContext)整合你的web層;

  • 金手指3:遠程使用場景 Remoting usage scenario

輸入圖片說明

當你須要經過web service來訪問已存在代碼時,你可使用spring的Hessian-,Burlap-,Rmi-或者JaxRpcProxyFactory等類;它們使遠程訪問不那麼困難;

  • 金手指4: EJBs-包裝已存在的pojos(Wrapping existing POJOs)

    輸入圖片說明

spring 爲企業bean提供了一個抽象訪問層;容許你重用現有的pojo並將它們包裝在無狀態的會話中,這樣你就能夠在可擴展的,自動安全的web應用中使用他,雖然這些應用可能須要聲明式安全; ###2.3.1 依賴管理和命名約束 依賴管理和依賴注入是兩碼事.爲了使spring的這些強大功能加入到你的應用(像依賴注入以這樣),你須要集成全部必要的類庫,並在運行將它們加入到類路徑,有的要求在編譯期.這些依賴並非要注入的虛擬組件,而是文件系統中的真實資源(即jar包).依賴管理的過程包含了資源定位,存儲它們並將他們添加到路徑中.依賴包括直接依賴(如 對spring的依賴),或者非直接的(如被你的項目依賴的commons-dbcp依賴的commons-pool同樣).這些非直接的依賴又被稱爲傳遞依賴,並且這些依賴很是難以識別和管理;

若是你打算使用spring,你須要複製一份包含你須要的spring部分的jar類庫.因爲spring儘量的按模塊來打包分割依賴,因此這會很簡單;好比你沒必要在一個非web應用中引入web模塊;在這份手冊中咱們所指的是縮寫命名規則,如spring-,spring-.jar,這裏的*表示模塊的縮寫(如spring-core,spring-webmvc,spring-jms);

真實的你使用的jar文件命名通常是模塊+版本號; 每一個發佈的spring發佈版會有如下改變

  • maven 中心 maven默認查詢倉庫,它不須要作任何特別的配置;大量的公共類庫能夠從Maven中心獲取,並且大量的spring社區使用maven做爲依賴管理,因此這對spring很適用.

這些jar的名字像spring-*-<version>.jar,而且maven的組織id是org.springframework

  • maven倉庫, 有個特定面向spring的maven倉庫;處理最終版的發佈

,這個倉庫還有承載開發快照和里程碑.這些jar包和maven中內心的同樣;因此這個地方能夠得到部署到倉庫中心中的spring的其餘開發版本;這個版本還包含了集合的發佈zip包,包含了因此的spring jars文件,並容易下載; 首先,肯定用什麼來管理依賴,咱們推薦用自動化的工具如maven,Gradle,或者lvy;不過你也能夠手動下載管理它們; 下面有個jar包描述列表;

spring-aop  基礎的AOP代理支持
  spring-aspects  基於AspectJ 的aspects(面向切面編程)	 
	spring-beans   beans支持,包括Groovy(基於java的編程語言);
	spring-context  應用上下文運行,包括定時和遠程抽象層
	spring-context-support 支持將第三方類庫加入到spring上下文中
	spring-core  核心功能,被許多spring模塊使用
	spring-expression  Spring表達語言
	spring-instrument  jvm啓動集成代理
	spring-instrument-tomcat  tomcat集成代理
	spring-jdbc  jdbc支持包,包括數據源安裝和jdbc訪問支持
	spring-jms   JMS支持包,包括各類發送,接受JMS消息的協助類
	spring-orm  對象關係映射,包括JPA和hibernate的支持
	spring-oxm  對象/xml 映射
	spring-tx   事務組件,包括對DAO(數據訪問對象)類支持和JCA集成
	spring-web   web支持包,包括客戶端和web遠程
	spring-webmvc  Restful的web服務,web應用的模型視圖控制器
	spring-webmvc-portlet  在portlet環境中mvc實現
	spring-websocket  WebSocket和SocketJS的實現,包括STOMP支持
  ```

- spring依賴和依賴spring
	雖然spring提供了不少企業及其餘外部工具的集成和支持;但它故意保持其強制依賴在最小值;你沒必要爲了一個簡單的用意去定位和下載大量的jar包,一般能夠實現自動.對於基本的依賴注入,
接下來咱們說下配置應用須要的spring的基本步驟:首先是maven,其次是Gradle,最後是lvy.一般,若是事情都很明確,查看你的依賴的管理系統的文檔,或者查看一些簡單的代碼,spring本身在運行時用Gradle來管理依賴,咱們的小例子大部分也用Gradle或Maven;
- maven依賴管理
若是你使用maven管理依賴,你甚至能夠不用提供loggging依賴.例如:建立一個應用上下文,並使用依賴注入進行配置;你的maven依賴應該這樣:
<dependencies>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.0.RELEASE</version>
    <scope>runtime</scope>
</dependency>

</dependencies> ```

就是這樣,若是你不須要編譯經過spring APIs,能夠把做用域標誌爲運行時;這是典型的基本的依賴注入的使用狀況; 這個例子使用maven 中心倉庫工做.要使用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依賴清單 (maven "Bill Of Materials" Dependency) 在使用maven時可能混合着不一樣的spring jar版本;例如:你要引用第三方的類庫,或其餘spring項目的文件,會有一箇舊版本的傳遞依賴.若是你沒有明確指出該直接依賴,那麼項目就會出現各類意想不到的問題. 爲了解決這些問題,maven提出了"材料清單"依賴的概念;你能夠在你的依賴管理模塊中引入spring-framework-bom,就能夠保證全部的spring依賴都是一個版本

    <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框架產品的版本屬性;
<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
<dependencies>```

Gradle Dependency Management(Gradle 依賴管理)
要在Gradle系統中使用Spring 倉庫,包括在倉庫部分合適的url:

```repositories {
    mavenCentral()
    // and optionally...
    maven { url "http://repo.spring.io/release" }
}```

- 你能夠將路徑從/release更改成/milestone或者/snapshot;一旦你肯定了倉庫,你可使用Gradle經常使用的方式申明依賴

dependencies { compile("org.springframework:spring-context:4.3.0.RELEASE") testCompile("org.springframework:spring-test:4.3.0.RELEASE") }

- Ivy 依賴管理
  若是你選擇使用Ivy來管理依賴,那麼他們與相同的配置選項;
  將如下的spring倉庫加入到你的ivysettings.xml文件中
  
 ``` <resolvers>
    <ibiblio name="io.spring.repo.maven.release"
            m2compatible="true"
            root="http://repo.spring.io/release/"/>
  </resolvers>```
  
  你能夠將路徑從/release更改成/milestone或者/snapshot.一旦配置完,你能夠用正常的方式添加依賴;

<dependency org="org.springframework" name="spring-core" rev="4.3.0.RELEASE" conf="compile->runtime"/>

-  分散zip文件
  儘管使用構造系統精細依賴管理是一個比較經常使用的使用spring框架的方式,但你仍可能下載一個分發包;
   分散包都在spring maven 倉庫中發佈(這是爲了照顧你的我的愛好,你不須要用maven或其餘工具來下載他們);
   
 -要下載一個分佈包,你須要在web瀏覽器打開地址 [spring maven倉庫](http://repo.spring.io/release/org/springframework/spring),而後選擇你要下載的子包的合適版本.分散的files以dist.zip結尾,例如spring-framework-{spring-version}-release-dist.zip.發散包一樣會發布里程碑和快照;
相關文章
相關標籤/搜索