在SSH框假中spring充當了管理容器的角色。我們都知道Hibernate用來做持久層,因為它
將JDBC做了一個良好的封裝,程序員在與數據庫進行交互時可以不用書寫大量的SQL語
句。Struts是用來做應用層的,他它負責調用業務邏輯serivce層。所以SSH框架的流程大
致是:Jsp頁面----Struts------Service(業務邏輯處理類)---Hibernate(左到右)
struts負責控制Service(業務邏輯處理類),從而控制了Service的生命周期,這樣層與層
之間的依賴很強,屬于耦合。這時,使用spring框架就起到了控制Action對象(Strus中的)
和Service類的作用,兩者之間的關系就松散了,Spring的Ioc機制(控制反轉和依賴注入)
正是用在此處。
Spring的Ioc(控制反轉和依賴注入)
控制反轉:就是由容器控制程序之間的(依賴)關系,而非傳統實現中,由程序代碼
直接操控
依賴注入:組件之間的依賴關系由容器在運行期決定 ,由容器動態的將某種依賴關系
注入到組件之中
使用Spring的第二個好處(AOP應用):
事務的處理:
在以往的JDBCTemplate 中事務提交成功,異常處理都是通過Try/Catch 來完成,而在
Spring中。Spring容器集成了TransactionTemplate,她封裝了所有對事務處理的功能,包括
異常時事務回滾,操作成功時數據提交等復雜業務功能。這都是由Spring 容器來管理,大
大減少了程序員的代碼量,也對事務有了很好的管理控制。Hibernate中也有對事務的管理,
hibernate 中事務管理是通過SessionFactory 創建和維護Session 來完成。而Spring 對
SessionFactory配置也進行了整合,不需要在通過hibernate.cfg.xml來對SessionaFactory進行
設定。這樣的話就可以很好的利用Sping對事務管理強大功能。避免了每次對數據操作都要
現獲得Session實例來啟動事務/提交/回滾事務還有繁瑣的Try/Catch操作。這些也就是Spring
中的AOP(面向切面編程)機制很好的應用。一方面使開發業務邏輯更清晰、專業分工更
加容易進行。另一方面就是應用Spirng AOP隔離降低了程序的耦合性使我們可以在不同
的應用中將各個切面結合起來使用大大提高了代碼重用度
任何語言、框架的發展都是為了降低程序之間的依賴性和耦合性,使重用性達到最高,在我們平時的四層框架中,界面層page、action層、業務邏輯層service、數據訪問層dao,雖然分層明確,代碼清晰,但是層與層之間有著很高的依賴性,比如service層處理業務邏輯構造sql語句時需要引用dao層的對象,調用dao層的方法執行sql語句,而action層處理界面動作的時候又要引用service層的對象,調用service層的方法,這樣一來實例action對象的時候要同時實例至少一個service對象和一個dao對象,這樣依賴性太強,因此我們把他們做成接口,只在類里寫各層的引用,而不對引用進行實例化,用spring的ioc依賴注入,在spring容器啟動時來實例化引用,降低了程序的依賴性,如果某個業務邏輯發生變化,可以重新寫一個新的業務邏輯實現類,修改spring的配置文件即可,不用每個action代碼中去改new的對象,這就是依賴注入。
而我們通常說一個方法只做一件事情,但是實際是實現不了的,因為一個方法除了做業務邏輯處理外還要至少處理事務、日志等事情,這些東西沒有辦法脫離,因此spring的aop面向切面,就將事務和日志可以定義成切面,配置的配置文件中,在你需要的時候切入進來,代碼中缺很清晰沒有事務和日志,這就是spring的aop。
posted on 2013-01-17 19:40
Kevin_YK 閱讀(600)
評論(0) 編輯 收藏 所屬分類:
SSH