SSH系列(一)--三者的融合(天下本是分久必合!!)

      最近打算把SSH架構好好縷縷(以前斷斷續續學過和使用過一些),因爲現在SSH(Struts+Spring+Hibernate)架構可以說是開發Web項目的一種輕量級的很好的解決方案,也比較成熟了,實際上在這三者(三個開源項目),Struts還是處理前端的運用,Hibernate處理持久化工資,而Spring像個聯合劑,它通過其applicationContext.xml配置文件,根據Ioc模式將前兩者需要的類實例化並提供給需要的地方(就是提供bean),當然其還可以在配置文件中提供聲明性事物處理,可以極大地節約代碼(Hibernate可不可以了??)。下面來詳細的說明一下:
      我們先看看SS的結合,其結合點在於將StrutsAction的實例生成不再由Struts自己負責,而交於Spring容器去管理,需要修改的地方是首先在Struts的配置文件上用plug-in加上Spring的配置文件applicationContext.xml,然後在在action的配置地方的type屬性統統設爲org.springframework.web.struts.DelegatingActionProxy,這樣Action的具體實現就有Spring去負責了,在Spring的配置文件中把相應的Action設爲bean,交由Spring容器去處理。在這個地方有一個要注意的問題,就是爲了使Struts的配置文件方便找到Spring的配置文件,我們把applicationContext.xml放在WEB-INF下,而不是放在classpath下面了,這樣如果在程序中要顯示調用ApplicationContext對象,就不能直接實例化它了,我們可以通過web context來取得它,具體做法是在web.xml中可以加一個Listener或是Servlet的聲明(兩者取一就可),Web容器會自動加載/WEB-INF/applicationContext.xml初始化ApplicationContext實例,配置完成之後,即可通過WebApplicationContextUtils.getWebApplicationContext
方法在Web應用中獲取ApplicationContext引用。
    而對於Spring和Hibernate的結合點在於關於Hibernate的SessionFactory的配置交於了Spring,即我們可以不要hibernate.cfg.xml,而將sessionFactory的配置作爲bean來交給Spring的配置文件,當然在這裏SessionFactory的Class用org.springframework.orm.hibernate3.LocalSessionFactoryBean,關於數據庫的登陸信息可以單獨作爲一個bean,如dataSource,然後在sessionFactory中引用。Spring對Hibernate提供大量的封裝好的類,如HibernateDaoSupport,這樣我們在使用是甚至不用先生成SessionFactory,再生成Session等等操作,Spring都提供了封裝;還有很重要的一點就是在事物維持上,用Spring的聲明性事物會更簡單容易些,也更靈活。
    以上簡要的分析了以下三者整合的一些結合點和具體的使用方法。
    另外今天在看《深入簡出Hibernate》 一書時,對於其前面提到的一些設計模式感覺上還是有不少共鳴的,如DAO模式,它可分成Domain Object和Data Accessor兩種模式的結合,Domain Object實際上就是我們在實際項目業務中所提煉出的一些POJO,而對於Data Accessor是對POJO的操作,前者實現了業務數據的對象化封裝,後者是實現了數據訪問和業務邏輯的分離,都是很好的解耦方法。另外對於Proxy,Decorator,Dynamic Proxy模式也分析的比較好,下次再就它們寫些心得(Dynamic Proxy還沒理解透!!)。      
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章