1. 程式人生 > >淺談對Spring的理解

淺談對Spring的理解

Spring框架是一個為Java應用程式的開發提供了綜合、廣泛的基礎性支援的Java平臺。

Spring是一個十分龐大的體系,具體可以訪問它的官網https://spring.io/projects進行詳細瞭解。

Spring體系裡的常用到的專案:

  • SpringFramework
  • SpringData
  • SpringSecurity
  • SpringBoot
  • SpringCloud

 

Spring實現了工廠模式的工廠類,這個類名為BeanFactory(介面),在程式中通常用他的子介面ApplicationContext。

BeanFactory是Spring容器的根介面,ApplicationContext是它的子介面,通常用它的子介面ApplicationContext來訪問Spring容器。

ApplicationContext子介面常用的有四個實現類

  • ClassPathXmlApplicationContext   從 classpath 載入 spring 的配置檔案
  • FileSystemApplicationContext   從系統檔案載入 spring 的配置檔案
  • AnnotationConfigApplicationContext   獲取基於註解的 spring 容器物件
  • XmlWebApplicationContext    在 web 環境中獲取 spring 容器物件

Spring相當於一個大的工廠類,在其配置檔案中通過<bean>元素配置用於建立例項物件的類名和例項物件的屬性。

工廠模式是一種生產物件型的設計模式,有了工廠模式後,當需要某個類的物件時,就不再需要new指定的類,而是呼叫工廠中的方法即可。也就不需要
關心物件的建立過程。甚至有時候也許你需要的物件只要是某種大分類的型別就可以了,而不必是某個指定的型別。不會過渡依賴某個類,這些類都是
易於被替換的,以提高整個專案的可維護性。

 

組成 Spring 框架的每個模組都可以單獨存在,或者與其他一個或多個模組聯合實現。每個模組的功能如下:

  • Spring 核心容器:核心容器提供 Spring 框架的基本功能,管理著Spring應用中bean的建立、配置和管理。核心容器的主要元件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用DI將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。
  • Spring 上下文:Spring 上下文是一個配置檔案,向 Spring 框架提供上下文資訊。提供了一種框架式的物件訪問方法,有些象JNDI註冊器。Context封裝包的特性得自於Beans封裝包,並添加了對國際化(I18N)的支援(例如資源繫結),事件傳播,資源裝載的方式和Context的透明建立,比如說通過Servlet容器。Spring 上下文和Bean工廠都是 bean 容器 的實現。
  • Spring AOP:通過配置管理特性,Spring AOP 模組直接將面向方面的程式設計功能整合到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何物件支援 AOP。Spring AOP 模組為基於 Spring 的應用程式中的物件提供了事務管理服務。
  • Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商丟擲的錯誤訊息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常程式碼數量(例如開啟和關閉連線)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
  • Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的物件關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
  • Spring Web 模組:Web 上下文模組建立在應用程式上下文模組之上,為基於 Web 的應用程式提供了上下文。
  • Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程式的 MVC 實現。通過策略介面,MVC 框架變成為高度可配置的,MVC 容納了大量檢視技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

 

spring有兩個核心思想 (IOC (控制反轉) , AOP(面向切面程式設計))

IOC (控制反轉) :  控制反轉就是一種思想 , 這個思想是怎麼想的呢 , 就是將物件控制權的轉移,從程式程式碼本身反轉到了外部容器 。就是想把實體類 的生命週期交給spring去控制 , 讓spring實現建立 ,實現初始化 , 實現銷燬 . 這樣就可以大大的免去在編寫程式碼的過程中new一個物件 , 眾所周知new 物件 是java程式碼編寫裡耦合性最大的一個事情 。

有反轉就會有正轉,正轉就是應用程式用到了什麼物件會直接在應用程式中進行建立,自己手動new出來。 

也說了IOC是一種思想 ,那麼怎麼把這種思想實現呢 ,如今比較流行的的方法是依賴注入 DI(Dependency Injection)

DI(依賴注入):是指程式執行過程中,若需要呼叫另一個物件協助時,無須在程式碼中建立被呼叫者,而是依賴於外部容器,由外部容器建立後傳遞給程式。依賴注入是目前最優秀的解耦方式。依賴注入讓Spring的Bean之間以配置檔案的方式組織在一起,而不是以硬編碼的方式耦合在一起的。

兩者的關係就是ioc是一種思想 ,而DI確實一種實現方式 ,這裡介紹了IOC,那麼下面再來說下spring的另外一個核心思想AOP

 

AOP(面向切面程式設計) : 面向切面程式設計是對OOP(面向物件程式設計)的完善和補充 。

面向切面是面向物件中的一種方式而已。在程式碼執行過程中,動態嵌入其他程式碼,叫做面向切面程式設計。

AOP採用一種稱為“橫切”的技術,將涉及多業務流程的通用功能抽取並單獨封裝,形成獨立的切面,在合適的時機將這些切面橫向切入到業務流程指定的位置中。

常見的使用場景有日誌 ,事物管理以及資料庫操作