Spring之旅第二站:bean、新特性。。。

第1章 Spring之旅

說明

  • 一、本文參考了《Spring 實戰》重點內容,參考了GitHub上的代碼
  • 二、每一個人的學習方式不同,但目的是同樣的,活學活用。最近一直在聽《咱們不同》
  • 三、本文只爲記錄做爲之後參考,要想真正領悟Spring的強大,請看原書。
  • 四、代碼和筆記在這裏GitHub,對你有幫助的話,歡迎點贊。
  • 五、萬千感慨,萬變不離其宗。必定要學好Java 8.

本章內容:java

  • Spring的bean容器
  • 介紹Spring的核心模塊
  • 更爲強大的Spring生態系統
  • Spring的新功能

1.2 容納你的Bean

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

首先重要的是瞭解容納對象的容器。理解容器將有助於理解對象是如何建立的。github

容器是Spring框架的核心。Spring容器使用DI管理構成應用的組件,它會建立相互協做的組件愛你之間的聯繫。這些對象更簡單幹淨、更容易理解,更易於重用而且易於進行單元測試。web

Spring容器並不僅是隻有一個,Spring自帶了多個容器實現,能夠概括爲兩種不一樣的類型:spring

  • Bean工廠。由 org.springframework.beans.factory.BeanFactory接口定義的。是最簡單的容器。
  • 應用上下文 由org.springframework.context.applicationContext接口定義的。基於BeanFactory構建,並提供應用框架級別的服務,例如:從屬性文件解析文本信息以及發佈應用事件給感興趣的事件監聽器。

應用上下文比Bean工廠更受歡迎。bean工廠對於大多數應用來講過低級了。數據庫

1.2.1使用應用上下文

Spring自帶了多種應用上下文:編程

  • AnonotationConfigApplicationContext:從一個或多個基於Java的配置文件類中加載Spring應用上下文
  • AnnotationConfigWebApplicationContext:從一個或多個基於Java配置類加載SpringWeb應用上下文
  • ClassPathXmlApplicationContext:從類路徑下的一個或多個XML配置文件中加載上下文定義,把應用上下文的定義文件做爲類資源
  • FileSystemXmlapplicationContext:從文件系統下的一個或多個XMl配置文件中加載上下文定義
  • XmlWebapplicationContext:從web應用下的一個或多個XML配置文件中加載上下文定義

不管是從文件系統中裝配應用上下文仍是從類路徑下裝配應用上下文,將bean加載到bean工廠的過程都是類似的。緩存

加載一個FileSystemXmlApplicationContext: 在文件系統的路徑下查找knight.xml安全

ApplicationContext context =
        new FileSystemXmlApplicationContext("c:/knight.xml");

也可使用ClassPathXmlApplicationContext: 全部的類路徑下查找knight.xmlmybatis

ApplicationContext context =
        new ClassPathXmlApplicationCOntext("knight.xml");

也能夠從Java配置中加載應用上下文,那麼可使用AnnotationConfigApplicationContext

ApplicationContext context = new  AnonotationConfigApplicationContext(
          com.guo.knights.config.KnightConfig.class);

應用上下文準備就緒以後,咱們就能夠調用上下文的getBean()方法從Spring容器中獲取bean。

1.2.2 bean的生命週期

在傳統的Java應用中,bean的生命週期很簡單。使用Java關鍵字new進行bean實例化,而後bean就可使用了。
一旦bean再也不使用,則由JCM自動進行垃圾回收。

相比之下,Spring容器中的bean聲明週期就顯得複雜多了。正確理解Spring bean的生命週期很是重要,由於你或許要利用Spring提供的擴展點來自定義bean的建立過程。

在bean工廠執行力若干啓動步驟;

  • 一、Spring對bean進行實例化
  • 二、Spring將值和 bean的引用注入到bean對應的屬性中。
  • 三、若是bean實現類beanNameAware接口,Spring將bean的ID傳給setBean-Name()方法
  • 四、若是bean實現類BeanFactoryAware接口,Spirng將調用setBeanFatory()方法,將BeanFactory容器實例傳入。
  • 五、若是bean實現類applicationContextAware接口,Spring將調用setApplicationContext()方法,將bean所在的應用上下文的引用傳遞進來。
  • 六、若是bean實現類BeanPostProcessor接口,Spring將調用它們的postProcessBeforInitialization()方法
  • 七、若是bean實現類InitializingBean接口,Spring將調用它們的afterPropertiesSet()方法,若是相似的,若是bean使用init-method聲明瞭初始化方法,該方法也會被調用。
  • 八、若是bean實現類BeanPostProcessor接口,Spring將調用它們的PostProcessAfterInitialization()方法
  • 九、此時,bean已經準備就緒,能夠被應用程序使用了,他們將一直駐留在應用上下文中,直到該應用上下文被銷燬。
  • 若是bean實現類DisPosableBean接口,Spring將調用他的destroy()接口方法。一樣,若是bean使用destroy-mothod聲明銷燬方法,該方法也會被調用。

1.3俯瞰Spring風景線

Srping框架經過關注於經過DI、AOP和消除模板樣式代碼來簡化企業級Java開發。即便這是Spring所能做的所有事情,那麼Spring也值得一用,Spring實際上的功能超乎你的想象

1.3.1 Spring模塊

這些模塊依據其所屬的功能劃分爲6類不一樣的功能,總而言之,這些模塊爲開發企業及應用提供了所需的一切 。可是你也沒必要將應用創建在整個Spring框架上,你能夠自由的選擇合適自身應用需求的Spring模塊:當Spring不能知足需求時,徹底能夠考慮其餘選擇,事實上,Spring甚至提供了與其餘的第三方框架和類庫的集成點,這樣你就不須要本身編寫代碼了。

Spring核心容器

容器是Spring最核心的部分,它管理者Spring應用中bean的建立、配置、管理。在該模塊中,包括了Spring bean工廠,它爲Spring提供了DI的功能,甚至bean工廠,咱們還會發現有多種Spring應用上下文的實現,每一種都提供了配置Spring的不一樣方式。

全部的Spring模塊都構建於核心容器之上。當你配置應用時,其實你隱式的使用率這些類。

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

數據訪問與集成

使用JDBC編寫代碼一般會致使大量的樣式代碼,Spring的JDBC和DAO模塊抽象類這些樣板代碼,是咱們的數據庫代碼變得簡單明瞭。還能夠避免由於關閉數據庫資源失敗而引起的問題。該模塊在多種數據庫服務的錯誤信息之上構建了一個語義豐富的異常層,之後咱們不再須要解釋那些隱晦專有的SQL信息了。

Spring提供了ORM模塊,Spring的ORM模塊創建在DAO的支持之上,併爲多個ORM框架提供了一種構建DAO的簡便方式 。Spring沒有嘗試去建立本身的ORM解決方,而是對許多流行的ORM框架進行了集成。包括Hibernater、Java Persisternce API、Java Data Object 和mybatis。Spring的事務管理支持全部的ORM框架以及JDBC。

Web與遠程調用
MVC(Model-View-Controller)模塊是一種廣泛被接受的構建Web應用的方法,它能夠幫助用戶將界面邏輯與應用邏輯分離,Java歷來不缺乏MVC框架,Apache的struts二、JSF、WebWorks都是可選的最流行的MVC框架。Spring遠程調用功能集成了RMI(Remote mehtod Invocation)、Hessian、CXF。Spring還提供了暴露和使用RESTAPI的良好支持。

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

Testing
經過該模塊,你會發現Spring爲JNDI、Servlet和Portlet編寫單元測試提供了一系列的mock對象事項,對於繼承測試,該模塊爲加載Spring應用上下文中的bean集合以及與Spirng上下文中的bean進行交互提供了支持。

1.3.2 Spring Portfolio

若是僅僅停留在和性的Spring框架層面,咱們將錯過Spring Portlio所提供的鉅額財富。整個Spirng Portlio包括多個構建與核心Spring框架之上的框架和類庫。歸納的來說,整個Spring Portlio幾乎爲每個領域的Java開發都提供了Spring編程模型

  • Spring Web Flow:是創建與Spring MVC框架之上,它爲基於流程的會話式Web應用(購物車、嚮導功能)提供了支持。
  • Spirng Security:安全度與許多應用都是一個很是關鍵的切面。利用SpringAOP,SpringSecurity爲Spring應用提供了聲明式的安全機制。
  • Spring Data:使得在Spring中使用任何數據庫都變得很是容易。一種新的數據庫種類,一般被稱爲NoSQL數據庫,提供了使用數據的新方法,爲所中數據庫提供了一種自動化的Repository機制,它負責爲你建立Repository的實現
  • Spring Boot: Spring極大的簡化了衆多編程的任務,減小甚至消除了不少樣板式代碼。Spring Boot大量依賴於自動配置技術,它可以消除大部分Spring配置。還提供了多個Starter項目,無論你是用Maven仍是Gradle,這都能減小Spring的工程構建文件的大小。

1.4 Spring的新功能

1.4.1 Spring3.1新特性

Spring 3.1帶來了多項有用的新特性 和加強,其中有不少都是關於如何簡化個改善配置的。除此以外,Spring3.1還提供了聲明式緩存的支持以及衆多針對SpringMVC的的功能加強。

  • 藉助於profile,就能根據應用佈置在什麼環境之中選擇不一樣的數據源
  • 基於Java配置,Spring3.1增長了多個enable註解,啓用Spring特定功能
  • 對聲明式緩存的支持,可以 使用簡單的註解聲明緩存的邊界和規則,
  • 開始支持Servlet3.0,包括在基於Java的配置中 申明Servlet和Filter,而再也不借助於web.xml

1.4.2 Spring 3.2新特性

Spring 3.2主要關注Spring MVC的一個發佈版本。

Spring MVC 3.2帶來以下的功能提高

  • 控制器(Controller)可使Servlet3.0異步請求,容許在一個獨立的線程中處理請求,從而就愛那個Servlet線程解放出來處理更多的請求
  • @Autowired、@Value、@Bean註解可以做爲元註解。用於建立自定義的註解和bean的申明註解
  • Spring的聲明式緩存提供了對JCache0.5的支持。

1.4.3 Spring 4.0新特性

  • Spring提供了對WebSocket編程的支持,
  • 新的消息模塊,
  • 支持Java8的新特性,好比:Lambda,函數式,
  • 爲 Groovy開發的應用程序提供了更加順暢的編程體驗
  • 添加了條件化建立bean的功能
  • Spring4.0包含了Spring RestTemplate的一個新的異步實現。它會當即返回而且容許在操做完成後執行回調
  • 添加了對多項JEE規範的支持,包括JMS 2.0 、JTA1.2 JPA 2.1

1.4.4 Spring 5.0新特性

  • 在Spring Framework代碼中使用JDK 8特性
  • 響應式編程是Spring Framework 5.0最重要的功能之一
  • 除了響應式特性以外,Spring 5還提供了一個函數式Web框架。
  • Spring Framework 5.0 引入了對 JetBrains Kotlin 語言的支持。

1.5 小節

Spring致力於簡化企業級開發Java開發、促進代碼的鬆耦合。成功的關鍵在於依賴注入和AOP。

DI是組裝應用對象的一種方式,藉助於這種方式對象無需知道依賴來自於何處或者依賴的具體實現方式。不一樣於本身獲取依賴對象,對象會在運行期賦予它們所依賴的對象。依賴對象一般會經過接口瞭解所注入的對象,這樣的話就能確保低耦合。

除了DI,還簡單介紹了Spring對AOP的支持,AOP能夠幫助應用將散落在各處的邏輯聚集於一處——切面。當Spring裝配bean的時候,這些切面可以運行期編織起來,這樣就能呢個很是有效的賦予bean新功能。

依賴注入和AOP是Spring框架最核心的部分,只有理解了如何應用Spring是最關鍵的功能。你纔有能力使用Spring框架的其餘功能。

相關文章
相關標籤/搜索