Spring系列—Spring入門

冰洋發表於2018-02-16

Spring

什麼是Spring

Spring是一個整合了很多優秀設計模式的企業級應用程式開發解決方案,第一版的Spring在03年釋出,經過十多年的發展,Spring已經成為一個龐大的體系,其使得 J2EE 開發變得越來越容易。

Spring的特點

Spring能夠得到全世界Java工程師的擁護,主要原因還在於其有很多優秀的地方,舉例如下:

輕量級

我們在提到Spring的時候經常會加的一個形容詞就是輕量級,一個輕量級的解決方案,Spring的輕量級一方面體現在大小上,基礎版本的Spring只有幾MB的大小。

另一方面,輕量級是指在使用Spring進行開發的時候,系統為Spring需要支出的資源較少。Spring 可以使開發人員使用 POJO 開發企業級的應用程式。而使用 POJO 的好處在於不需要一個龐大的 EJB 容器產品(應用程式伺服器),有一個輕量級的 servlet 容器就夠了。

POJO(Plain Ordinary Java Objects),實際上就是普通的java類

控制反轉

如果說什麼是Spring最大的特點,那麼毫無疑問是IOC和AOP。

IOC(Inversion of Control)控制反轉,它是一種設計思想,簡單說就是建立Java物件的過程從之前new出來,變成了由Spring工廠建立出來(由Spring來負責控制物件的生命週期和物件之間的關係),控制反轉,轉移的就是建立物件的主動權。

有了IOC容器之後,我們把建立和查詢依賴物件的控制權交給了容器,有容器決定需要獲取什麼樣的資源,而不是我們在應用程式中實現的建立和安排好。通俗的來說就是所有的類在容器中進行註冊,告訴容器自身的資訊(什麼類,什麼作用等)以及需要什麼;隨著系統的執行,Spring會主動的給你提供你需要的物件,並且把你提供給需要的部分。

這樣的設計很好的體現了物件導向的設計法則之一——好萊塢法則(別找我們,我們找你),即由IoC容器幫物件找相應的依賴物件並注入,而不是由物件主動去找。

和IOC緊密結合在一起的是DI(Dependency Injection)依賴注入。依賴注入可以說是控制反轉的一個具體實現例子,其在Spring中的體現在於元件之間的依賴關係由容器控制,我們通過簡單的配置,不通過程式碼就可以得到指定的資源。

IOC解耦合

切面程式設計

說過了IOC,接下來就是Spring的另一個特點AOP(aspect oriented program),面向切面程式設計。

利用一種稱為“橫切”的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到一個可重用模組,並將其名為“Aspect”,即方面。所謂“方面”,簡單地說,就是將那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模組間的耦合度,並有利於未來的可操作性和可維護性。

AOP代表的是一個橫向的關係,程式是順序執行的,可以簡單理解為線性執行,自上而下,就象一條線,所謂切面程式設計就是,在這條線的某一點(切點)處切開,放入另一個程式(增強處理),這個過程就是我們常說的織入,而被切入處可以用幾何常識形象的稱之為切面。

Spring的常規元件

Spring作為一個企業級應用程式的解決方案,器體系無疑是龐大的,但是有利於我們使用的是Spring是模組化實現的,允許使用者根據實際需要選擇所需模組,而不必使用所有的模組。因此在使用Spring之前我們需要對Spring的組成有一個簡單的瞭解。

Spring體系組成模組

核心容器

核心容器由核心,Bean,上下文和表示式語言模組組成

  • 核心模組提供了框架的基本組成部分,包括 IoC 和依賴注入功能。
  • Bean 模組提供 BeanFactory,它是一個工廠模式的複雜實現。
  • 上下文模組建立在由核心和 Bean 模組提供的堅實基礎上,它是訪問定義和配置的任何物件的媒介。ApplicationContext 介面是上下文模組的重點。
  • 表示式語言模組在執行時提供了查詢和操作一個物件圖的強大的表示式語言。
資料訪問

資料訪問/整合層包括 JDBC,ORM,OXM,JMS 和事務處理模組,它們的細節如下:

  • JDBC 模組提供了刪除冗餘的 JDBC 相關編碼的 JDBC 抽象層。
  • ORM 模組為流行的物件關係對映 API,包括 JPA,JDO,Hibernate 和 iBatis,提供了整合層。
  • OXM 模組提供了抽象層,它支援對 JAXB,Castor,XMLBeans,JiBX 和 XStream 的物件/XML 對映實現。
  • Java 訊息服務 JMS 模組包含生產和消費的資訊的功能。
  • 事務模組為實現特殊介面的類及所有的 POJO 支援程式設計式和宣告式事務管理。
Web

Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細節如下:

  • Web 模組提供了基本的面向 web 的整合功能,例如多個檔案上傳的功能和使用 servlet 監聽器和麵向 web 應用程式的上下文來初始化 IoC 容器。
  • Web-MVC 模組包含 Spring 的模型-檢視-控制器(MVC),實現了 web 應用程式。
  • Web-Socket 模組為 WebSocket-based 提供了支援,而且在 web 應用程式中提供了客戶端和伺服器端之間通訊的兩種方式。
  • Web-Portlet 模組提供了在 portlet 環境中實現 MVC,並且反映了 Web-Servlet 模組的功能。
其他

還有其他一些重要的模組,像 AOP,Aspects,Instrumentation和測試模組,它們的細節如下:

  • AOP 模組提供了面向方面的程式設計實現,允許你定義方法攔截器和切入點對程式碼進行乾淨地解耦,它實現了應該分離的功能。
  • Aspects 模組提供了與 AspectJ 的整合,這是一個功能強大且成熟的面向切面程式設計(AOP)框架。
  • Instrumentation 模組在一定的應用伺服器中提供了類 instrumentation 的支援和類載入器的實現。
  • 測試模組支援對具有 JUnit 或 TestNG 框架的 Spring 元件的測試。

環境基本配置

簡單瞭解過Spring之後並不能立馬開始Spring的使用,我們需要進行簡單的環境配置。

Spring下載

官網:http://spring.io/

通過官網下載需要的Spring版本,解壓之後目錄結構如下

Spring目錄結構

  • docs

    Spring相關資料文件

  • libs

    Spring需要使用的jar包,需要注意的是目前的3.X和4.X版本中的jar包只有Spring的jar包,不包含相關依賴的jar包。什麼意思呢?說的是在2.X的版本中包含有maven,struts的相關的jar包,之後的高版本中是沒有的。

  • schema

    .xsd檔案

環境搭建

Spring的基本環境配置和使用其他框架一樣,新增相關的jar包和配置檔案。不做過多的解釋,在此提供一個基本的applicationContext.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
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

 
</beans>
複製程式碼

參考資料

https://juejin.im/post/5a30cda9f265da432652d31a


我不能保證每一個地方都是對的,但是可以保證每一句話,每一行程式碼都是經過推敲和斟酌的。希望每一篇文章背後都是自己追求純粹技術人生的態度。

永遠相信美好的事情即將發生。

相關文章