之前寫過一篇類似的文章,現在回過頭來看很糟糕。 很多人在第一次大架構的時候感到很迷茫,包括本人。尤其是jar包的問題,那麼多,到底哪些該加,哪些不該加。網上雖然有很多教程和文章,但都是把一堆jar包壘上,然後給出一個demo。諾,照這樣做,架構就搭好了。看,我還加了cglib,aspectj呢。
其實,新手應該從搭一個SSH的最小系統開始,以後熟練了,再玩點高大上的,用aspectj,cglib之類的。
什麼是最小系統?
計算機或計算機相關專業都學過單片機,單片機有個最小系統,它由三個部分組成:單片機+晶振電路+複位電路。它用最少的元件組成了可以工作的單片機系統。 此處省略一些字。
那麼我們的SSH最小系統是什麼呢?
在我心目中,SSH的最小系統應該是這樣:
很簡單,就是MVC分層,實作基本的增删改查操作。 難點就在于事務的了解和配置。涉及到更新操作(增,删,改)是要開啟事務的,請知悉。沒有jdbc程式設計基礎,知道這點就足夠了。
準備工作:從官網下載下傳這些:
spring-framework-4.0.2.RELEASE-dist.zip,
hibernate-release-4.3.5.Final.zip,
struts-2.3.16.1-all.zip,
aopalliance.zip
(spring-aop.jar依賴這個jar包,spring沒有給出這個jar包很可惡,官方文檔也不提),
aspectj-1.8.0.M1.jar(
C:\Program Files\MySQL\MySQL Connector J\mysql-connector-java-5.1.34-bin.jar (裝mysql的時候注意勾選上MySQL Connector J,這樣才能拿到mysql驅動jar包。以前可以直接下載下傳到,現在不行了)
準備完畢,我們開始:
①建立一個Dynamic Web Project。注意,如果你選擇的web module version是3.0,請在向導最後一步勾選上Generate web.xm deployment descriptor。這樣才會自動生成一個web.xml。
②拷貝這些jar包到WEB-INF/lib下。

具體過程是這樣的:
struts2的jar包:
解壓struts-2.3.16.1-all\struts-2.3.16.1\apps\struts2-blank.war. 這是struts2的最小系統。這裡有struts2需要的最少jar包。log4j也配置好了,spring官方文檔提到spring唯一依賴的一個外部jar包是Log4j.jar。(其實不對還有aopalliance.jar和aspectjweaver.jar) 直接使用這個“空工程”能省我們很多事。 搭SSH我更傾向于從 Struts開始,因為它的jar包最簡單。
Hibernate的jar包:
hibernate的jar包還好了解。就是required和optional\c3p0檔案夾下的jar包全部拷貝,很貼心不是。有一點需要注意,hibernate裡和struts2裡有一個重複的jar包——javassist-3.18.1-GA.jar。選擇hibernate裡的就可以了。 c3p0是Hibernate推薦的資料庫連接配接池,spring推薦的連接配接池是dbcp,卻沒有給出jar包。 拷貝c3p0的jar包同時,也請把驅動jar包mysql-connector-java-5.1.34-bin.jar一并拷貝,免得忘了。
spring的jar包:
關鍵就在這裡。不知道該怎麼下手,管他3721,Ctrl+A?這樣不好,沒有用到的功能沒必要加備援jar包。其實了解了spring的結構也很簡單,看:
這是spring的結構。
①是spring容器的核心,這4個jar包都要。
②我們是web工程,這個jar包必不可少。
③我們要連資料庫,進行增删改查操作。是以jdbc,orm這兩個Jar包需要。jdbc需要資料庫連接配接池,是以我們用了一個連接配接池c3p0。 orm是關系映射對象,是Hibernate幹的事,但是spring既然是容器,是以它必須提供這個接口。
④.注意這一塊的了解: 增删改需要開啟事務。spring提供聲明式事務(declarative transaction)。可以是xml-based,也可以是annotation-based。 開啟事務是要在方法執行前就要開始的。就是說我們要攔截方法後開啟事務,是以需要AOP的支援。AOP和Aspect是分不開的。是以這兩個Jar包也是需要的。由于spring-aop.jar依賴aoplliance.jar,而且spring自帶
的AOP用了aspectjweaver.jar裡的某些類,是以這兩個個jar也是需要的(spring給的jar包漏了這兩個jar包,實在是不應該)。 強烈建議spring把我提到的這些jar包放在一個required包下,跟Hibernate一樣,這樣多好。我說的這些已經是最基礎的功能了,用的也是最少的jar包,沒有半點備援 。
再強調最後一個jar包。是struts裡的一個jar包叫struts2-spring-plugin-2.3.16.1.jar。 因為我們把struts交給spring這個容器管理了,是以需要這個東東。
至此,所有Jar包都解釋清楚了。讀者不應該再對SSH需要哪些jar包感到疑惑。
struts的配置檔案:在解壓完struts2-blank這個工程的時候已經有了。 spring說需要唯一一個外部的jar包 log4j.jar 。在這個工程裡也有了。
下面開始配置spring和hibernate。 spring和hibernate都配置在一個叫ApplicationContext.xml裡。
從哪開始呢。 打開spring官方文檔:spring-framework-4.0.2.RELEASE-dist\spring-framework-4.0.2.RELEASE\docs\spring-framework-reference\htmlsingle\index.html
1)Ctrl+F 搜尋 ApplicationContext.xml ,我們來到這裡
Common configuration
在web.xml裡加這個:
這樣我們的web工程就使用上了spring。
2)我們知道ApplicationContext.xml其實就是一個bean的集合。 這個配置檔案裡配置都是各種bean。是以我們搜尋beans
來到這裡:
The following example shows the basic structure of XML-based configuration metadata:
把這些拷貝到 ApplicationContext.xml裡
這樣我們就有了一個最簡單的spring配置檔案了。
3)關鍵步驟:這樣考慮:
連資料庫 ->配置dataSouce
使用hibernate的session->配置sessionFactory
請spring幫我們管理事務->配置txManager
( 如果我們使用注解形式開啟事務,隻需配置 打開注解模式 即可。如果我們使用xml形式配置事務,那麼我們還要配置aop。)
我們的dataSouce使用c3p0,直接搜尋c3p0.找到這個
然後搜尋sessionFactory找到這裡:
因為我們使用Hibernate4.x是以改成:
稍作修改:
注意context标簽和property-placeholder屬性在context命名空間裡。是以要引入context.xsd檔案
然後搜尋jdbc.properties。 最後這個檔案是這樣的:
下面是最難的事務:(兩種方式:xml-based; annotation-based)
搜尋 transaction來到這裡:
When the above POJO is defined as a bean in a Spring IoC container, the bean instancecan be made transactional by adding merelyone line of XML configuration:
i) 注解形式開啟事務:其實就一句話, 它是最簡單的。我們一般都用這種形式。
然後在service層裡的方法上加上這個即可:
注意這回命名空間多了這些:
知道這一大坨東西怎麼來的了吧。就是這樣一點一點加上來的。 網上給的都是完整的一大坨,也不知道怎麼來的。
ii) xml方式開啟事務是這樣的:
最終的ApplicationContext.xml是這樣子的:
最後解釋一下這句話:
因為我們的daoimpl裡有這個
我們讓spring管理hibernate。所有session都讓spring幫我們打開和關閉。 spring的HibernateTemplate類需要sessionFactory。是以這裡隻用一個setter注入sessionFactory即可。這段代碼在spring的文檔裡也有。這文檔寫的到位。
至此SSH配置完畢。也許還有沒說清楚的地方。 源碼奉上。 希望大家養成看文檔的好習慣,也許一開始我們并不知道從哪下手,沒關系,先弄清楚我們要做什麼,做這些東西我們需要什麼。摸清楚了大緻流程,就隻管Ctrl+F往文檔上招呼。筆者當初在搭這個架構的時候感覺很棘手,搭了很多次,寫點心得希望對你有幫助。
最後一個小插曲。 如果用annotation-based方式開啟事務 aspectjweaver.jar可以不加。 但是用xml-based方式配置事務,這個jar必須要加。讀者可以自己試一下。 在maven工程中aspectjweaver.jar是必須要加的,不然啟動報錯。
這是下載下傳連結:
http://download.csdn.net/detail/ahau10/8951449