前言html
開始工做了,可是一進來公司原本是作爬蟲和數據分析的,可是走了一個後端的,致使我必需要去頂替他的工做。由於這個項目使用的是Spring、
SpringMVC、Hibernate因此我又要去回憶一下了。畢竟好久都沒有用了。java
首先咱們來談一談軟件的架構吧。web
1)數據訪問層spring
主要是對原始數據(數據庫或者文本文件等存放數據的形式)的操做層,而不是指原始數據,也就是說,是對數據的操做,而不是數據庫
數據庫,具體爲業務邏輯層或表示層提供數據服務.
2)業務邏輯層編程
主要是針對具體的問題的操做,也能夠理解成對數據層的操做,對數據業務邏輯處理,若是說數據層是積木,那邏輯層就是對這些後端
積木的搭建。具體的講主要負責對數據層的操做。也就是說把一些數據層的操做進行組合。
3)表示層安全
主要表示WEB方式,若是邏輯層至關強大和完善,不管表現層如何定義和更改,邏輯層都能完善地提供服務。主要對用戶的請求接受,服務器
以及數據的返回,爲客戶端提供應用程序的訪問。架構
1)優勢
1:開發人員能夠只關注整個結構中的其中某一層;
2:能夠很容易的用新的實現來替換原有層次的實現;
3:能夠下降層與層之間的依賴;
4:有利於標準化;
5:利於各層邏輯的複用。
6:結構更加的明確
7:在後期維護的時候,極大地下降了維護成本和維護時間
2)缺點
1:下降了系統的性能。這是不言而喻的。若是不採用分層式結構,不少業務能夠直接造訪數據庫,以此獲取相應的數據,
現在卻必須經過中間層來完成。
2:有時會致使級聯的修改。這種修改尤爲體如今自上而下的方向。若是在表示層中須要增長一個功能,爲保證其設計符合
分層式結構,可能須要在相應的業務邏輯層和數據訪問層中都增長相應的代碼。
3:增長了開發成本。
所謂的四層架構的分法,就是想把軟件設計師工做量降下來,減小重複性的代碼,提升開發速度,使軟件有至關好的可維護、易擴展,這種四層架構
對多人開發同軟件來講,能夠有個清晰的思路。我把系統分紅表示層(UI)、業務邏輯層(Bussiness/Service)、數據訪問層(DataAccess/Dao)、
數據實體層(Domain)。若是你還考慮到數據庫設計的話,就是五層架構。
1)關注request/response動做
解決一個模型的UI顯示
處理一些基本的格式邏輯以及非業務邏輯相關的驗證邏輯
處理從其它層拋出的異常:
2)DAO
用來與持久化的數據庫,如關係數據庫交互
提供一種查詢語言
可能提供ORMapping的機制
可使用JDBC,hibernate,Ibatis,JDO,Entity Beans等。
3)Deomain
包含一系列能夠貫通上邊所說兩層的業務對象
包含其餘域對象之間有交互關係
可能又豐富的業務邏輯
就是把實際數據庫裏的映射到內存中,也稱爲OMapping(能經過ORM獲取相應的對象)
域對象之間可能存在依賴關係
4)Service
將業務邏輯的業務暴露給表現層
管理容器級別的服務,例如事務,安全,數據訪問邏輯
Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著做Expert One-On-One J2EE Development and Design
中闡述的部分理念和原型衍生而來。它是爲了解決企業應用開發的複雜性而建立的。框架的主要優點之一就是其分層架構,分層架構容許使用者選擇使用哪一
個組件,同時爲 J2EE 應用程序開發提供集成的框架。Spring使用基本的JavaBean來完成之前只可能由EJB完成的事情。然而,Spring的用途不只限於服務器端
的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用均可以從Spring中受益。Spring的核心是控制反轉(IoC)和麪向切面(AOP)。簡單來講,
Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架。
註釋:
輕量級的容器:
容器:spring容器幫咱們管理業務邏輯層,裏邊有不少業務邏輯對象,有對象就有對象的生命週期的管理(建立,銷燬)。
輕量級:容器給予的業務邏輯對象多少種服務?spring給用戶提供的服務徹底有用戶本身決定,spring想用什麼服務本身開啓使用。
可是重量級的都是隻要你用就把全部的服務都給你,不能本身定製。
spring容器歷來不能獨立運行,必定藉助於其餘容器啓動,或者藉助web容器啓動,或者ejb容器啓動。
特色:
應用模塊之間耦合度小,組件都是可重用的,都是各自打包的。
1)動態解藕,方便開發,面向接口設計
經過Spring提供的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。有了Spring,用戶沒必要再爲單實例模式類、
屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用
2)方便程序的測試TDD(Test-Driven Development)
能夠用非容器依賴的編程方式進行幾乎全部的測試工做,在Spring裏,測試再也不是昂貴的操做,而是隨手可作的事情。
3)下降Java EE API的使用難度
Spring對不少難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個簡單的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降。
4)方便集成各類優秀框架
Spring不排斥各類優秀的開源框架,相反,Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
5)AOP編程的支持
經過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付。
6)聲明式事務的支持
在Spring中,咱們能夠從單調煩悶的事務管理代碼中解脫出來,經過聲明式方式靈活地進行事務的管理,提升開發效率和質量。
7)對異常的處理方式,全部的都轉換成Unchecked的。
8)它不是一個一體化的解決方案。
9)良好的設計,容易擴展,不少可重用的組件。
詳細圖:
大體圖:
1)核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用
控制反轉(IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
二、Spring 上下文:Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如JNDI、EJB、電子郵件、國際化、
校驗和調度功能。
三、Spring AOP:經過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持AOP。
Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。
四、Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,
而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。
五、Spring ORM:Spring 框架插入了若干個ORM框架,從而提供了 ORM 的對象關係工具,其中包括JDO、Hibernate和iBatisSQL Map。全部這些都聽從 Spring 的通用事務
和 DAO 異常層次結構。
六、Spring Web 模塊:Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。因此,Spring框架支持與 Jakarta Struts 的集成。
Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。
七、Spring MVC 框架:MVC框架是一個全功能的構建 Web應用程序的 MVC 實現。經過策略接口,MVC框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、
Velocity、Tiles、iText 和 POI。模型由javabean構成,存放於Map;視圖是一個接口,負責顯示模型;控制器表示邏輯代碼,是Controller的實現。Spring框架的功能能夠
用在任何J2EE服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE服務的可重用業務和數據訪問對象。毫無疑問,
這樣的對象能夠在不一樣J2EE 環境(Web 或EJB)、獨立應用程序、測試環境之間重用。
1)輕量
從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小隻有1MB多的JAR文件裏發佈。而且Spring所需的處理開銷也是微不足道的。
此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴於Spring的特定類。
2)控制反轉
Spring經過一種稱做控制反轉(IoC)的技術促進了低耦合。當應用了IoC,一個對象依賴的其它對象會經過被動的方式傳遞進來,而不是這個對象本身建立
或者查找依賴對象。你能夠認爲IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
3)面向切面
Spring提供了面向切面編程的豐富支持,容許經過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。
應用對象只實現它們應該作的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支持。
4)容器
Spring包含並管理應用對象的配置和生命週期,在這個意義上它是一種容器,你能夠配置你的每一個bean如何被建立——基於一個可配置原型(prototype),
你的bean能夠建立一個單獨的實例或者每次須要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不該該被混同於傳統的重量級的EJB容器,
它們常常是龐大與笨重的,難以使用。
5)框架
Spring能夠將簡單的組件配置、組合成爲複雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件裏。Spring也提供了不少
基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。
6)MVC
Spring的做用是整合,但不只僅限於整合,Spring 框架能夠被看作是一個企業解決方案級別的框架。客戶端發送請求,服務器控制器(由DispatcherServlet實現的)
完成請求的轉發,控制器調用一個用於映射的類HandlerMapping,該類用於將請求映射到對應的處理器來處理請求。HandlerMapping 將請求映射到對應的處理器
Controller(至關於Action)在Spring 當中若是寫一些處理器組件,通常實現Controller 接口,在Controller 中就能夠調用一些Service 或DAO 來進行數據操做
ModelAndView 用於存放從DAO 中取出的數據,還能夠存放響應視圖的一些數據。 若是想將處理結果返回給用戶,那麼在Spring 框架中還提供一個視圖組件ViewResolver,
該組件根據Controller 返回的標示,找到對應的視圖,將響應response 返回給用戶。
(1)Spring Core(IOC) 核心容器
提供組件的建立、裝備、銷燬
(2)Spring Context Spring上下文
是一個接口ApplicationContext(繼承自BeanFactory接口)的實現
(3)Spring Web容器
web應用上下文,是webApplicationContext接口的實現
(4)SpringDAO容器
是SpringDAO 支持模塊,是爲了簡化DAO的使用
(5)SpringORM
(6)Spring AOP
對AOP編程支持的模塊
(7)Spring MVC
相似於Spring表示層的一個框架
參考文獻:
http://www.cnblogs.com/ysocean/p/7466191.html