歡迎光臨
每天分享高質量文章

通向架構師的道路(第十八天)萬能框架 Spring ( 一 )(上)

(點選上方公眾號,可快速關註)


來源:袁鳴凱,

blog.csdn.net/lifetragedy/article/details/8096762

一、前言

前一陣列剛換了個新的工作環境,然後自己的baby也剛出生,一直沒有時間去做工作以後的其它事了,擔擱了一段日子。

今天兒子滿一週了,我內人她家幫著照顧著,總算我可以喘口氣休息一下,因此決定將這個系列的博文繼續下去,同時也將此篇獻給我剛出生一週的兒子和幸苦了10個月的愛人。

二、基本概念

Spring,作為一個流行框架它給我們在日常工程中的框架搭建提供了太多的便利了,它就像一個骨架一樣,你可以在上面自己去塑出肌膚與血肉並賦於它靈魂。

從今天開始我們將要連續幾天基於Spring的基礎上來講軟體開發框架,由於Spring被應用的太廣泛太廣泛了,因此此係列教程可以作為Spring開發的一套基礎教程也可以稱其為“典範或者公式化教程”吧.

此套教程會改寫以下內容:

1) Spring+Struts1+jdbctemplate;

2) Spring+Struts1+Hibernate;

3) Spring+Struts2+ibatis;

4) Spring+Struts1、2+任意DAO層的Unit Test;

5)甚至還會講到如何使用Spring來構建應用程式,對,你沒聽錯使用Spring可以構建單獨執行的java應

用程式,尤其在銀行、保險業中有一種叫“批處理”的業務,就是應用程式,那麼我們使用Spring會為

我們的批處理作業帶來什麼樣的好處呢?敬請期待!

三、Spring+Struts+jdbctemplate

3.1 框架介紹

作為架構師,同時你也必須為“框架師”,架構是從廣意上來講的,它的知識需要改寫到硬體、軟體、協議甚至業務背景。

但是一個架構師在專案中時它又必須是一個“框架師”,就和造房子一樣,框架搭的好,房子造出來才能堅固。

我們就先來看我們第一幢房子的腳手加架-Spring在我們專案中的使用吧,先來看架構圖,一般我喜歡用Visio來畫架構圖,畫完後直接在Visio的workspace裡ctrl+a全選後回到 word後按ctrl+v,這樣你的word文字中就有了一幅visio的圖了,而你在word檔案中雙擊這個visio圖它會自動在當前的檔案中開啟visio的workspace以便於你來編輯你的visio圖,這樣你就不用來回在word與 visio間進行切換了,也不用每次把visio轉成jpg後再到word中插入圖片了,這是一個標準操作樣式,希望能夠為大家今後的操作帶來方便。當然,平時看到好的檔案,好的架構圖把它收藏起來、分門別類相信你的檔案會越寫越漂亮.

Look,這就是我們的框架。

Spring

在此我們使用3.1,它負責IOC,AOP等工作,用於代理業務層(Service層)的事務。

Struts

在此我們使用1.3,它負責控制層以及相關的JSP頁面(採用Struts標簽)。

控制層透過業務層再訪問資料庫層。

Spring Jdbc Template

負責ORMapping,由於我們使用的資料還需要進行一些複雜的彙總與計算,因此在未來系統開發中還需要開發一系列的StoreProcedure(儲存過程),用jdbc template不僅可以方便靈活的使用SQL查詢陳述句,同時也為訪問各種資料庫的儲存過程帶來了方便。

該框架優點:

1. 分層清晰,替換靈活,易於擴充套件

上述框架採用View Layer,Controller Layer,Service Layer,DAOLayer進行分層。層與層之間全部基於介面。

1) 邏輯的任何變動不影響到程式碼的執行

2) 自動代理資料庫的事務操作,尤於採用了Spring的DataSourceTransactionManager,該類是一個完全基於AOP的事務自動代理,由於使用的是AOP中的圍繞機制,因此該類會自動利用AOP功能在資料庫操作時進行事務的開啟、提交、關閉並且在遇見Exception時會自動回滾。該類使用萬用字元的方式,對於業務層進行事務管理。由於Controller層不直接操作DAO,而是透過Service層來操作事務的,因此事務的切片定位在Service層。另外,由於一個Service方法有可能涉及到多個DAO操作,所以將事務定位在Service層有助於保持資料的一致性。

3) 層中相關技術的替換不影響到其它層面,層與層之間的全部基於介面,因此各個層內自身的邏輯或者是採用的相關技術的變化不影響到其它層。舉例來說:現在的DAO層是Spring JdbcTemplate,如果將來換成Hibernate或者是EJB的JPA來做DAO層的話,對於整個DAO層只需要按照原有介面重寫相關的impl類,而view層, controller層與Service層的變動為“零程式碼”改動。

2. 簡化配置,提高生產力

本框架使用的是Spring3.0+Struts2.x作為系統框架的核心。傳統的框架伴隨著一堆xml檔案的配置,比如說用於描述Struts中Action的配置,層與層之間的依賴關係,甚至特定的class需要用到的外部變數都需要進行基於xml格式的配置檔案的修改。

Xml配置檔案的改動,如果出現一處錯誤往往會影響整個系統的執行,或者甚至導致系統執行崩潰。而本框架使用了JDK1.6中的“全註解”技術,除了需要改動一個cbbs.properties檔案,各層之間的呼叫全部使用的Annotation,比如說我們需要在一個Struts的Action中呼叫一個Service, 只需要在相關的Action的Class裡進行如下的註釋即可:

@Resource

EmailActivationService activateService;

而傳統的需要作下麵這樣的配置:

     

設想,假如有100個類,上百個Service,再加上數百個DAO,我們的xml的配置將是多麼的龐大啊,這就是典型的“xml泛濫”,這同時也將導致程員工工作效率,生產效率的低下。

而現在採用了Annotation方式來搭建框架,這在極大程度上使得程式員與框架之間是“透明”的,讓程式員將更多時間花在“業務”的實現上。這一切都用的是Spring的“註解”特性,即

”。

該框架不需要使用容器的jdbcjndi,而自帶了一個 c3p0的jdbcconnection pool,它將會隨著容器的啟動而啟動,結束而銷亡.

現了基本的資源保護

我們在該框架中使用了以下幾種技術的混合來實現外部資源檔案的安全保護

1)  基於Spring的Properties的註入

2)  在properties檔案與spring的配置xml檔案裡實現了placeholder,即替換符,記住它的英文的表達叫“place holder”。

3)  使用了第三方開源免費包jasypt與spring結合自動對properties檔案中的關鍵內容如:password進行加密與解密

3.2 框架搭建

首先使用eclipse建立一個”dynamice web project”,我們管它叫”alpha”吧,我們的第一個孩子。

然後與src同級的地方建立一個resource目錄,並把它加入classpath

別忘了把Defaultoutput folder:從bin改成alpha/WebContent/WEB-INF/classes

再建立一個目錄叫ext-lib的目錄,把tomcat的lib目錄內的jsp-api.jar與servlet-api.jar兩個檔案拷入該檔案夾內.因為我們在涉及到一些servlet與jsp的編寫時,需要使用這兩個jar進行編譯,但我們又不能把這兩個jar檔案與我們的工程一起釋出到tomcat的webapp目錄下,因為tomcat已經含有這兩個jar檔案了,所以這兩個jar檔案需要以下麵的方式引入我們的工程而不隨著我們的工程一起釋出:

這是工程目錄結構整理完後的樣子,請照著該結構在resource目錄下自行建立其它幾個目錄(不要去管檔案,先把目錄建完)。

然後我們把

  • struts

  • spring

  • c3p0-0.9.1.2.jar等

一些需要的jar檔案一個個都copy到我們工程的WEB-INF/lib目錄下並掃清工程。這些jar在你下載的spring、struts、hibernate包中都有帶,可以自行去查詢.

修改我們的web.xml檔案,尤其註意下麵紅色與加粗的部分,一粗就爽了是吧,嘿!

web.xml


 

贊(0)

分享創造快樂