spring工作原理及其作用

spring工作原理

   1.springmvc請所有的請求都提交給DispatcherServlet,它會委託應用系統的其他模塊負責負責對請求進行真正的處理工作。 

 2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller. 

 3.DispatcherServlet請請求提交到目標Controller 

 4.Controller進行業務邏輯處理後,會返回一個ModelAndView 

 5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象 

 6.視圖對象負責渲染返回給客戶端。 

爲什麼要使用Spring: 

  AOP 讓開發人員可以創建非行爲性的關注點,稱爲橫切關注點,並將它們插入到應用程序代碼中。使用 AOP後,公共服務(比如日誌、持久性、事務等)就可以分解成方面並應用到域對象上,同時不會增加域對象的對象模型的複雜性。 

  IOC 允許創建一個可以構造對象的應用環境,然後向這些對象傳遞它們的協作對象。正如單詞 倒置 所表明的,IOC 就像反過來的JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straightconstruction),每一個對象都是用其協作對象構造的。因此是由容器管理協作對象(collaborator)。 

  Spring即使一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協作對象)。然後可以很容易地在需要時替換具有類似接口的協作對象。 

  Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring模塊構建在覈心容器之上,核心容器定義了創建、配置和管理bean 的方式,如圖 1 所示。 

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

  核心容器:核心容器提供 Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實現。BeanFactory使用控制反轉(IOC)模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。 

  Spring 上下文:Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。 

  Spring AOP:通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了Spring框架中。所以,可以很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於Spring的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴EJB組件,就可以將聲明性事務管理集成到應用程序中。 

  Spring  DAOjdbcdao抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。SpringDAO的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。 

  Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM的對象關係工具,其中包括JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和DAO異常層次結構。 

  Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,爲基於Web的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts的集成。Web模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。 

  Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC實現。通過策略接口,MVC框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括JSP、Velocity、Tiles、iText 和 POI。 
 

  spring 框架的功能可以用在任何 J2EE服務器中,大多數功能也適用於不受管理的環境。Spring的核心要點是:支持不綁定到特定 J2EE服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象可以在不同 J2EE 環境 (Web或EJB)、獨立應用程序、測試環境之間重用。

 

 Spring工作原理
      內部最核心的就是IOC了,  
動態注入,讓一個對象的創建不用new了,可以自動的生產,這其實就是利用java裏的反射  
反射其實就是在運行時動態的去創建、調用對象,Spring就是在運行時,跟xml Spring的配置  
文件來動態的創建對象,和調用對象裏的方法的 。  
  Spring還有一個核心就是AOP這個就是面向切面編程,可以爲某一類對象 進行監督和控制(也就是  
在調用這類對象的具體方法的前後去調用你指定的 模塊)從而達到對一個模塊擴充的功能。這些都是通過  
配置類達到的。  
  Spring目的:就是讓對象與對象(模塊與模塊)之間的關係沒有通過代碼來關聯,都是通過配置類說明  
管理的(Spring根據這些配置 內部通過反射去動態的組裝對象)  
  要記住:Spring是一個容器,凡是在容器裏的對象纔會有Spring所提供的這些服務和功能。  
Spring裏用的最經典的一個設計模式就是:模板方法模式。(這裏我都不介紹了,是一個很常用的設計模式)  
  Spring裏的配置是很多的,很難都記住,但是Spring裏的精華也無非就是以上的兩點,把以上兩點跟理解了 也就基本上掌握了Spring.

Spring AOP與IOC
一、 IoC(Inversion of control): 控制反轉  
1、IoC:  
概念:控制權由對象本身轉向容器;由容器根據配置文件去創建實例並創建各個實例之間的依賴關係  
核心:bean工廠;在Spring中,bean工廠創建的各個實例稱作bean  
二、AOP(Aspect-Oriented Programming): 面向方面編程  
1、 代理的兩種方式:  
靜態代理:  
1) 針對每個具體類分別編寫代理類;  
2)針對一個接口編寫一個代理類;  
動態代理:  
針對一個方面編寫一個InvocationHandler,然後借用JDK反射包中的Proxy類爲各種接口動態生成相應的代理類
Spring 優缺點

它是一個開源的項目,而且目前非常活躍;它基於IoC(Inversion of Control,反向控制)和AOP的構架多層j2ee系統的框架,但它不強迫你必須在每一層 中必須使用Spring,因爲它模塊化的很好,允許你根據自己的需要選擇使用它的某一個模塊;它實現了很優雅的MVC,對不同的數據訪問技術提供了統一的 接口,採用IoC使得可以很容易的實現bean的裝配,提供了簡潔的AOP並據此實現Transcation Managment,等等
優點  
1). Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。如果你僅僅使用了Struts或其他爲J2EE的 API特製的framework,Spring致力於解決剩下的問題。  
2). Spring能消除在許多工程中常見的對Singleton的過多使用。根據我的經驗,這是一個很大的問題,它降低了系統的可測試性和麪向對象的程度。  
3). 通過一種在不同應用程序和項目間一致的方法來處理配置文件,Spring能消除各種各樣自定義格式的屬性文件的需要。曾經對某個類要尋找的是哪個魔法般的屬性項或系統屬性感到不解,爲此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean屬性。Inversion of Control的使用(在下面討論)幫助完成了這種簡化。  
4).  通過把對接口編程而不是對類編程的代價幾乎減少到沒有,Spring能夠促進養成好的編程習慣。  
5).  Spring被設計爲讓使用它創建的應用儘可能少的依賴於他的APIs。在Spring應用中的大多數業務對象沒有依賴於Spring。  
6).  使用Spring構建的應用程序易於單元測試。  
7). Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。  
8). Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適用於許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不通過EJB容器,如果你僅僅需要與單個數據庫打交道,甚至不需要一個JTA實現。  
9). Spring爲數據存取提供了一個一致的框架,不論是使用的是JDBC還是O/R mapping產品(如Hibernate)。  
10). Spring確實使你能通過最簡單可行的解決辦法來解決你的問題。而這是有有很大價值的。

缺點:jsp中要寫很多代碼、控制器過於靈活,缺少一個公用控制器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章