history, design philosophy, feedback, getting started.html
Version 5.1.7.RELEASEjava
Spring使得能夠很容易的建立Java企業應用。在一個企業環境中,他徹底使用Java語言提供你須要的全部東西,而且也支持基於JVM的Groovy和Kotlin,同時能夠根據應用須要靈活的建立多種多樣的架構設計。從Spring Framework 5.1開始,Spring須要JDK8+(Java SE 8+),併爲JDK11 LTS提供開箱即用的支持。git
「Spring」這個詞在不一樣的語境中有不一樣的意思,最初,它能夠被用來指Spring Framework 項目自己。以後其餘的一些Spring 項目基於Spring Framework 建立。一般,你們說「Spring」是指整個Spring家族。這個參考文檔專一於這些的基礎:Spring Framework 。
Spring Framework 劃分爲多個模塊。應用能夠選擇須要的模塊。這些模塊的核心是core容器,包括配置模型和依賴注入的機制。除此以外,Spring爲不一樣的應用架構提供了基礎支持,包括消息,事務數據和持久化,Web。它也提供了基於Servlet的Spring MVC框架,並平行的提供Spring WebFlux響應式Web框架。github
Spring的框架包能夠基於JDK 9的模塊路徑("Jigsaw")構建。Spring Framework 5 的jar包使用"Automatic-Module-Name" 聲明項,聲明項根據固定的語法的模塊名("spring.core", "spring.context" 等等) 而不是jar文件名(jar文件遵循一樣的命名模式,只是單詞鏈接使用「-」而不是「.",好比"spring-core" and "spring-context")。固然Spring的框架包依然能夠正常使用JDK8和JDK9+基於classpath的方式web
Spring起始於2003的一個對於早期J2EE規範的回覆.然而一些觀點認爲Java EE 和Spring是競爭關係,Spring其實是Java EE的補充。Spring 編程設計並無遵循Java EE平臺規範,確切的說,它當心的選擇了一下Java EE下的獨立的規範:spring
Servlet API (JSR 340)編程
WebSocket API (JSR 356)api
Concurrency Utilities (JSR 236)服務器
JSON Binding API (JSR 367)架構
Bean Validation (JSR 303)
JPA (JSR 338)
JMS (JSR 914)
以及在須要的狀況下提供JTA/JCA的事務協做設置
Spring Framework 也支持應用開發者使用依賴注入 (JSR 330)和通用註解(JSR250)規範來替換由Spring Framework提供的Spring定義的機制,從Spring Framework 5.0開始,Spring的最低版本是Java EE 7 (相應的其餘規範好比Servlet 3.1+,JPA2.1+),同時提供了了集成在Java EE 8 (相應的其餘規範好比Servlet4.0,JSON Binding API)上的新API的運行時支持。這使得Spring徹底兼容好比Tomcat 8 和9,WebSphere 9 和 JBoss EAP 7.
隨着時間的過去,應用開發中的Java EE規則也已經進行了改進,在Java EE 和 Spring 的早期時候,應用的完成須要依賴於應用服務器。如今,由於有了 Spring Boot,應用只須要很小的改動就能夠以一個Devops 和雲友好的方式使用內置的 Servlet 容器。從Spring Framework 5開始,WebFlux甚至不須要直接使用Servlet API而且運行在沒有Servlet 容器的服務器上Spring在不斷地創新和發展。Spring Framework以外還有 Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch等等的一些項目。須要注意的是每一個項目都有各自的源碼資源,問題追蹤和發佈節奏,點擊spring.io/projects 查看Spring項目完整列表
對於如何使用的問題,以及判斷或調試的問題,咱們推薦使用 StackOverflow,而且咱們也有一個用來記錄建議標籤的問題頁,若是您肯定了一個SpringFramework中的問題,或者想要提供一個特性,請使用GitHub Issues
若是您有解決方案或建議的解決方案,能夠在Github上提交拉取請求。 可是,請注意對於除最瑣碎的問題之外的全部問題,咱們但願在問題跟蹤器中記錄故障單,在該跟蹤器中進行討論並保留記錄以備未來參考。
有關更多詳細信息,請參閱貢獻頂級項目頁面上的準則。
若是你剛開始使用Spring,你能夠能但願從一個基於Spring Boot的應用開始使用Spring Framework.Spring Boot 提供了一個快捷和固定的方式去建立一個基於Spring的生產就緒狀態的應用.它基於Spring Framework,相比配置更傾向於約定的旨在使你儘快起步和運行》
你可使用start.spring.io來建立一個基本的項目或者跟着"Getting Started" guides其中的一個作,好比開始建立一個Restful Web Service.爲了容易理解,這些引導文檔更關注於引導如何建立,而且大部分都是基於Spring Boot.它們也包含了一些當你解決一個特定問題時可能考慮用到的Spring家族的其餘項目.
核心技術
IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.
Version 5.1.7.RELEASE
這部分的參考文檔覆蓋了Spring Framework全部的必不可少的技術
這一章是關於Spring的控制反轉(IoC)容器的。
這一章是關於Spring Framework對於控制反轉(Ioc)規範的實現。IoC也被稱爲依賴注入(DI)。它是一個在構造以後或者工廠方法返回值後對象決定他們的依賴值經過構造器參數,工廠方法參數或者設置在對象實例上的參數的處理形式。容器在建立這些bean以後會注入到對象的依賴.這種處理方式從根本上是bean直接經過類的構造或者好比服務定位器模式的機制控制bean自己實例化或者bean依賴的定義的方式的反轉(所以被稱爲依賴反轉)
org.springframework.beans 和 org.springframework.context 包是Spring Framework IoC容器的基礎。BeanFactory接口提供了一個能夠管理任意對象類型的高級配置機制。ApplicationContext 是BeanFactory的一個子接口,它增長了:
簡單的說,BeanFactory 提供了配置框架和基礎特性,ApplicationContext添加了一些針對企業的特性.ApplicationContext是BeanFactory的完整的超集因此在本章關於Spring IoC容器的講解中只使用ApplicationContext.得到關於BeanFactory的更多信息,seeThe BeanFactory
在Spring中,主要構成應用的對象被Spring IoC容器所管理,被稱爲bean。一個bean是已經實例化,已經組合過的而且被Spring IoC管理的對象。實際上,一個bean只是應用中衆多對象中簡單的一個。Bean以及他們的依賴都是容器使用配置元數據反射獲得的。
org.springframework.context.ApplicationContext 接口便是指IoC容器,它負責實例化,配置,和組合bean.容器經過讀取配置元數據得到去實例化,配置和組合什麼對象的指引。配置元數據具體是指XML,Java註解或者Java代碼。它可讓你描述那些組成應用的對象和他們之間的完整的互相依賴關係。
Spring提供了幾個繼承自ApplicationContext的接口,在獨立的應用中,一般建立一個ClassPathXMLApplicationContext或者FileSystemXMLApplicationContext.雖然XML是定義配置元數據的傳統格式,你也能夠經過少許XML配置去聲明開啓額外的元數據格式使得容器使用Java註解或者代碼做爲元數據格式。
在大多數應用場景中,用戶沒必要要顯性的編寫代碼來實例化一個Spring容器的一些實例。例如,在Web應用場景中,一般須要在應用的web.xml文件中添加簡單的大約8行的模板web標識符XML(see Convenient ApplicationContext Instantiation for Web Applications).若是你使用Spring Tool Suite(一個基於Eclipse的開發環境),你能夠簡單的經過點按幾下鼠標或鍵盤來建立這些模板。
下圖展現了Spring如何工做的一個高層的視角.首先你的應用中的類經過配置元數據組合,而後在ApplicationContext被建立和初始化後,你就有了一個完整配置過和可執行的系統或應用。
Figure 1. The Spring IoC container
如前圖所展現的同樣,Spring IoC 容器 消費 消費這個詞相似於生產者消費者模式中的消費者消費的概念了一份配置元數據,這個配置元數據描述了做爲一個應用開發者的你告訴Spring 容器若是去實例化,配置和組合你應用中的對象。
配置元數據傳統的方式是用簡單和直觀的XML格式,這一章大部分也使用XML格式來表現Spring IoC 容器的概念和特性。
基於XML的元數據並非配置元數據能夠接收的惟一格式,Spring IoC容器自己與元數據的編寫方式是解耦的。如今,不少開發者爲他們的Spring應用選擇了使用基於Java註解的方式。
獲取更多關於爲Spring 容器使用其餘格式的信息,請看:
Spring 配置 包括了容器必須管理的至少一個,實際上超過一個的bean。基於XML配置元數據經過頂級元素
這些bean的定義與組成你應用的實際對象相一致。一般,你定義service層對象,數據訪問對象(DAOs,data access objects),好比Struts Action實例的展現對象,好比Hibernate SessionFactories的基礎對象。JMS隊列等等。一般,不爲容器中的領域對象進行細粒度配置,由於一般是DAO和業務邏輯負責建立和使用領域對象。不過你可使用讓Spring集成AspectJ來配置已經在IoC容器以外建立的對象。請看Using AspetJ to dependency-inject domain objects with Spring.
下面例子展現了基於XML配置元數據的基本結構:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans>
id 屬性標識每一個bean定義的字符串。
class 屬性定義了bean的類型,須要使用徹底限定類名。
id 屬性的值指向協做對象,引用寫做對象的XML沒有展現在例子中,請看Dependencies獲取更多信息。
提供給ApplicationContext構造器的定位路徑是一些讓容器經過多種形式的外部資源載入的資源字符串。好比一個本地文件系統路徑,Java CLASSPATH路徑等等
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
學習過Spring的IoC容器後,你可能但願知道更多關於Spring的