淺談對Spring的理解

Spring框架是一個爲Java應用程序的開發提供了綜合、普遍的基礎性支持的Java平臺。java

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

Spring體系裏的經常使用到的項目: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(面向切面編程))spa

IOC (控制反轉) :  控制反轉就是一種思想 , 這個思想是怎麼想的呢 , 就是將對象控制權的轉移,從程序代碼自己反轉到了外部容器 。就是想把實體類 的生命週期交給spring去控制 , 讓spring實現建立 ,實現初始化 , 實現銷燬 . 這樣就能夠大大的免去在編寫代碼的過程當中new一個對象 , 衆所周知new 對象 是java代碼編寫裏耦合性最大的一個事情 。

有反轉就會有正轉,正轉就是應用程序用到了什麼對象會直接在應用程序中進行建立,本身手動new出來。 

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

DI(依賴注入):是指程序運行過程當中,若須要調用另外一個對象協助時,無須在代碼中建立被調用者,而是依賴於外部容器,由外部容器建立後傳遞給程序。依賴注入是目前最優秀的解耦方式。依賴注入讓Spring的Bean之間以配置文件的方式組織在一塊兒,而不是以硬編碼的方式耦合在一塊兒的。

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

 

AOP(面向切面編程) : 面向切面編程是對OOP(面向對象編程)的完善和補充 。

面向切面是面向對象中的一種方式而已。在代碼執行過程當中,動態嵌入其餘代碼,叫作面向切面編程。

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

常見的使用場景有日誌 ,事物管理以及數據庫操做

相關文章
相關標籤/搜索