Spring核心 Spring簡介

簡化Java開發

JavaBean:Enterprise JavaBean、EJB
JDO:Java數據對象、Java Data Object
POJO:Plain Old Java Object
DI:依賴注入、Dependency Injection、DI
AOP:面向切面編程、Aspect-Orientied Programmingandroid

爲了下降Java開發的複雜性,Spring採起了如下4種關鍵策略:web

  • 基於POJO的輕量級和最小侵入性編程spring

  • 經過依賴注入和麪向接口實現鬆耦合數據庫

  • 基於切面和慣例進行聲明式編程編程

  • 經過切面和模板減小樣板式代碼安全

依賴注入

DI功能是如何實現的

依賴注入會將所依賴的關係自動交給目標對象,而不是讓對象本身去獲取依賴網絡

DI的最大收益——鬆耦合。若是一個對象只經過接口(而不是具體實現或初始化過程)來代表依賴關係,那麼這種依賴關係就可以在對象自己絕不知情的狀況下,用不一樣的具體實現進行替換架構

對依賴進行替換的一個最經常使用方法就是測試的時候使用mock實現app

裝配wiring

建立應用組件之間協做的行爲一般稱爲裝配(wiring)。Spring有多種裝配bean的方式,採用XML是很常見的一種裝配方式框架

觀察它如何工做

Spring經過應用上下文(Application Context)裝載bean的定義並把它們組裝起來。Spring應用上下文全權負責對象的建立和組裝。Spring自帶了多種應用上下文的實現,它們之間主要的區別僅僅在於如何加載配置

應用切面

DI可以讓相互協做的軟件組件保持鬆散耦合,而面向切面編程容許你把遍及應用各處的功能分離出來造成可重用的組件

AOP可以使系統及服務模塊化,並以聲明的方式將它們應用到它們須要影響的組件中去。這些組件會具備更高的內聚性而且會更加關注自身的業務,徹底不須要了解涉及系統服務所帶來複雜性。總之,AOP可以確保POJO的簡單性

使用模板消除樣板式代碼

Spring旨在經過模板封裝來消除樣板式代碼。Spring的JdbcTemplate使得執行數據庫操做時,避免傳統的JDBC樣板代碼成爲了可能。僅僅須要關注於獲取員工數據的核心邏輯,不須要迎合JDBC API需求

容納你的Bean

在基於Spring的應用中,應用對象生存於Spring容器(container)中。Spring容器負責建立對象,裝配它們,配置它們並管理它們的整個生命週期,從生存到死亡

Spring自帶多個容器實現,能夠歸爲兩種不一樣的類型:

  • bean工廠(由org.springframework.beans.factory.BeanFactory接口定義)是最簡單的容器,提供基本的DI支持。(對於大多數應用來說bean工廠顯得過低級)

  • 應用上下文(由org.springframework.context.ApplicationContext接口定義)基於BeanFactory構建,並提供應用框架級別的服務,例如從屬性文件解析文本信息以及發佈應用事件給感興趣的事件監聽者

使用應用上下文

  • AnnotationConfigApplicationContext: 從一個或多個基於Java的配置類中加載Spring應用上下文

  • AnnotationConfigWebApplicationContext:從一個或多個基於Java的配置類中加載SpringWeb的應用上下文

  • ClassPathXmlApplicationContext:從類路徑下的一或多個XML配置文件中加載上下文定義, 並把應用上下文的定義文件做爲類資源

  • FileSystemXmlApplicationContext: 從文件系統下的一個或多個XML配置文件中加載上下文定義

  • XmlWebApplicationContext:從web應用下的一個或多個XML配置文件中加載上下文定義

加載一個FileSystemXmlApplicationContext:
ApplicationContext context = new FileSystemXmlApplicationContext("c:/knight.xml");

使用ClassPathXmlApplicationContext從應用的類路徑下加載應用上下文:
ApplicationContext context = new ClassPathXmlApplicationContext("knight.xml");

使用AnnotationConfigApplicationContext從Java配置中加載應用上下文:
ApplicationContext context = new AnnotationConfigApplicationContext(com.springinaction.knights.config.KnightConfig,class);

bean的生命週期

圖片描述

  1. Spring對bean進行實例化

  2. Spring將值和bean的引用注入到bean對應的屬性中

  3. 若是bean實現了org.springframework.beans.BeanNameAware接口,Spring將bean的ID傳遞給setBeanName()方法

  4. 若是bean實現org.springframework.beans.factory.BeanFactoryAware接口,Spring將調用setBeanFactory()方法,將BeanFactory容器實例傳入

  5. 若是bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()方法,將bean所在的應用上下文的引用傳入進來

  6. 若是bean實現了BeanPostProcessor接口,Spring將調用postProcessBeforeInitialization()方法

  7. 若是bean實現了InitializingBean接口,Spring將調用afterPropertiesSet()方法。相似地,若是bean使用init-method聲明瞭初始化方法,該方法也會被調用

  8. 若是bean實現了BeanPostProcessor接口,Spring將調用postProcessAfterInitialization()方法

  9. 此時,bean已經準備就緒,能夠被應用程序使用了,它們將一直駐留在應用上下文中,直到該應用上下文被銷燬

  10. 若是bean實現了DisposableBean接口,Spring將調用distroy()接口方法。一樣,若是bean使用destroy-method聲明瞭銷燬方法,該方法也會被調用

俯瞰Spring風景線

Spring模塊

圖片描述

Spring核心容器

容器是Spring框架最核心的部分,管理着Spring應用中bean的建立、配置和管理。在該模塊中,包括了Spring bean工廠,爲Spring提供DI功能。基於bean工廠,會有多種Spring應用上下文的實現

Spring的AOP模塊

在AOP模塊中,Spring面向切面編程提供了豐富的支持,該模塊是Spring應用系統中開發切面的基礎,能夠幫助應用對象解耦。藉助於AOP,能夠將遍及系統的關注點(事務和安全)從它們所應用的對象中解耦出來

數據訪問與集成

Spring的JDBC和DAO(Data Access Object)模塊抽象了JDBC編寫的樣板代碼

ORM(Oboject-Relational Mapping)模塊創建在對DAO的支持之上,併爲多個ORM框架提供了一種構建DAO的簡便方式。對許多留學的ORM框架進行了集成,包括Hibernate、Java Persisternce API、Java Data Object和iBATIS SQL Maps。Spring的事務管理支持全部的ORM框架以及JDBC

本模塊還包括JMS(Java Message Service)之上構建的Spring抽象層,它會使用消息以異步的方式與其餘應用集成;包含對象到XML映射的特性;使用Spring AOP模塊爲Spring應用中的對象提供事務管理服務

Web與遠程調用

MVC(Model-View-Controller)模式是一種廣泛被接受的構建Web應用的方法,幫助用戶將界面邏輯與應用邏輯分離

Spring遠程調用功能集成了RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,同時Spring還自帶了一個遠程調用框架:HTTP invoker。Spring還提供了暴露和使用REST API的良好支持

Instrumentation

Spring的Instrumentation模塊提供了爲JVM添加代理(agent)的功能。具體來說,它爲Tomcat提供了一個織入代理,可以爲Tomcat傳遞類文件,就像這些文件是被類加載器加載的同樣

測試

Spring爲使用JNDI(Java Naming and Directory Interface,Java命名和目錄接口)、Servlet(Server Applet)和Portlet編寫單元測試提供了一系列的mock對象實現。對於集成測試,該模塊爲加載
Spring應用上下文中的bean集合以及與Spring上下文中的bean進行交互提供了支持

Spring Portfolio

Spring Portfolio包括多個構建於核心Spring框架之上的框架和類庫。整個Spring Portfolio幾乎爲每個領域的Java開發都提供了Spring編程模型

Spring Web Flow

Spring Web Flow創建於Spring MVC框架之上,它爲基於流程的會話式Web應用(購物車或者嚮導功能)提供了支持。Spring Web Flow的主頁(http://projects.spring.io/spr...

Spring Web Service

雖然核心的Spring框架提供了將Spring bean以聲明的方式發佈爲Web Service的功能,可是這些服務是基於一個具備爭議性的架構(拙劣的契約後置模型)之上而構建的。這些服務的契約由bean的接口來決定。Spring Web Service提供了契約優先的Web Service模型,服務的實現都是爲了知足服務的契約而編寫的。
Spring Web Service的主頁(http://docs.spring.io/spring-...

Spring Security

安全對於許多應用都是一個很是關鍵的切面。利用Spring AOP,Spring Security爲Spring應用提供了聲明式的安全機制。Spring Security的主頁(http://projects.spring.io/spr...

Spring Integration

許多企業級應用都須要與其餘應用進行交互。Spring Integration提供了多種通用應用集成模式的Spring聲明式風格實現。Spring Integration的主頁(http://projects.spring.io/spr...

Spring Batch

當咱們須要對數據進行大量操做時,沒有任何技術能夠比批處理更勝任這種場景。若是須要開發一個批處理應用,能夠經過SpringBatch,使用Spring強大的面向POJO的編程模型。
Spring Batch的主頁(http://projects.spring.io/spr...

Spring Data

Spring Data使得在Spring中使用任何數據庫都變得很是容易。NoSQL數據庫提供了使用數據的新方法,這些方法會比傳統的關係型數據庫更爲合適。無論你使用文檔數據庫,如MongoDB,圖數據庫,如Neo4j,仍是傳統的關係型數據庫,Spring Data都爲持久化提供了一種簡單的編程模型。

這包括爲多種數據庫類型提供了一種自動化的Repository機制,它負責爲你建立Repository的實現

Spring Social

Spring的一個社交網絡擴展模塊。Spring Social更多的是關注鏈接(connect),而不是社交(social)。
它可以幫助你經過REST API鏈接Spring應用,其中有些Spring應用可能本來並無任何社交方面的功能目標。
https://spring.io/guides/gs/a...
https://spring.io/guides/gs/a...

Spring Mobile

Spring Mobile是Spring MVC新的擴展模塊,用於支持移動Web應用開發

Spring for Android

經過Spring框架爲開發基於Android設備的本地應用提供某些簡單的支持。它還能與Spring Social協做,使得原生應用能夠經過REST API進行社交網絡的鏈接。Spring for Android的主頁(http://projects.spring.io/spr...

Spring Boot

Spring Boot以Spring的視角,致力於簡化Spring自己。Spring Boot大量依賴於自動配置技術,它可以消除大部分(在不少場景中,甚至是所有)Spring配置。還提供了多個Starter項目,無論你使用Maven仍是Gradle,這都能減小Spring工程構建文件的大小

相關文章
相關標籤/搜索