posts - 0,comments - 0,trackbacks - 0
          在SSH框假中spring充當(dāng)了管理容器的角色。我們都知道Hibernate用來做持久層,因?yàn)樗?br />將JDBC做了一個(gè)良好的封裝,程序員在與數(shù)據(jù)庫進(jìn)行交互時(shí)可以不用書寫大量的SQL語
          句。Struts是用來做應(yīng)用層的,他它負(fù)責(zé)調(diào)用業(yè)務(wù)邏輯serivce層。所以SSH框架的流程大
          致是:Jsp頁面----Struts------Service(業(yè)務(wù)邏輯處理類)---Hibernate(左到右)   
            struts負(fù)責(zé)控制Service(業(yè)務(wù)邏輯處理類),從而控制了Service的生命周期,這樣層與層
          之間的依賴很強(qiáng),屬于耦合。這時(shí),使用spring框架就起到了控制Action對(duì)象(Strus中的)
          和Service類的作用,兩者之間的關(guān)系就松散了,Spring的Ioc機(jī)制(控制反轉(zhuǎn)和依賴注入)
          正是用在此處。   
               Spring的Ioc(控制反轉(zhuǎn)和依賴注入)   
               控制反轉(zhuǎn):就是由容器控制程序之間的(依賴)關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中,由程序代碼
          直接操控   
               依賴注入:組件之間的依賴關(guān)系由容器在運(yùn)行期決定  ,由容器動(dòng)態(tài)的將某種依賴關(guān)系
          注入到組件之中  
          使用Spring的第二個(gè)好處(AOP應(yīng)用):   
              事務(wù)的處理:   
             在以往的JDBCTemplate 中事務(wù)提交成功,異常處理都是通過Try/Catch 來完成,而在
          Spring中。Spring容器集成了TransactionTemplate,她封裝了所有對(duì)事務(wù)處理的功能,包括
          異常時(shí)事務(wù)回滾,操作成功時(shí)數(shù)據(jù)提交等復(fù)雜業(yè)務(wù)功能。這都是由Spring 容器來管理,大
          大減少了程序員的代碼量,也對(duì)事務(wù)有了很好的管理控制。Hibernate中也有對(duì)事務(wù)的管理,
          hibernate 中事務(wù)管理是通過SessionFactory 創(chuàng)建和維護(hù)Session 來完成。而Spring 對(duì)
          SessionFactory配置也進(jìn)行了整合,不需要在通過hibernate.cfg.xml來對(duì)SessionaFactory進(jìn)行
          設(shè)定。這樣的話就可以很好的利用Sping對(duì)事務(wù)管理強(qiáng)大功能。避免了每次對(duì)數(shù)據(jù)操作都要
          現(xiàn)獲得Session實(shí)例來啟動(dòng)事務(wù)/提交/回滾事務(wù)還有繁瑣的Try/Catch操作。這些也就是Spring
          中的AOP(面向切面編程)機(jī)制很好的應(yīng)用。一方面使開發(fā)業(yè)務(wù)邏輯更清晰、專業(yè)分工更
          加容易進(jìn)行。另一方面就是應(yīng)用Spirng    AOP隔離降低了程序的耦合性使我們可以在不同
          的應(yīng)用中將各個(gè)切面結(jié)合起來使用大大提高了代碼重用度



          任何語言、框架的發(fā)展都是為了降低程序之間的依賴性和耦合性,使重用性達(dá)到最高,在我們平時(shí)的四層框架中,界面層page、action層、業(yè)務(wù)邏輯層service、數(shù)據(jù)訪問層dao,雖然分層明確,代碼清晰,但是層與層之間有著很高的依賴性,比如service層處理業(yè)務(wù)邏輯構(gòu)造sql語句時(shí)需要引用dao層的對(duì)象,調(diào)用dao層的方法執(zhí)行sql語句,而action層處理界面動(dòng)作的時(shí)候又要引用service層的對(duì)象,調(diào)用service層的方法,這樣一來實(shí)例action對(duì)象的時(shí)候要同時(shí)實(shí)例至少一個(gè)service對(duì)象和一個(gè)dao對(duì)象,這樣依賴性太強(qiáng),因此我們把他們做成接口,只在類里寫各層的引用,而不對(duì)引用進(jìn)行實(shí)例化,用spring的ioc依賴注入,在spring容器啟動(dòng)時(shí)來實(shí)例化引用,降低了程序的依賴性,如果某個(gè)業(yè)務(wù)邏輯發(fā)生變化,可以重新寫一個(gè)新的業(yè)務(wù)邏輯實(shí)現(xiàn)類,修改spring的配置文件即可,不用每個(gè)action代碼中去改new的對(duì)象,這就是依賴注入。
          而我們通常說一個(gè)方法只做一件事情,但是實(shí)際是實(shí)現(xiàn)不了的,因?yàn)橐粋€(gè)方法除了做業(yè)務(wù)邏輯處理外還要至少處理事務(wù)、日志等事情,這些東西沒有辦法脫離,因此spring的aop面向切面,就將事務(wù)和日志可以定義成切面,配置的配置文件中,在你需要的時(shí)候切入進(jìn)來,代碼中缺很清晰沒有事務(wù)和日志,這就是spring的aop。
          posted on 2013-01-17 19:40 Kevin_YK 閱讀(596) 評(píng)論(0)  編輯  收藏 所屬分類: SSH

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 汉沽区| 通许县| 垦利县| 五华县| 新昌县| 鹤庆县| 凌海市| 汕头市| 沙雅县| 齐齐哈尔市| 崇礼县| 无棣县| 盐津县| 沙河市| 大庆市| 临安市| 桐乡市| 东安县| 桃源县| 金寨县| 金坛市| 房产| 资阳市| 泰兴市| 景谷| 阿坝县| 无锡市| 盐池县| 竹山县| 黎城县| 会泽县| 柳林县| 防城港市| 沭阳县| 布拖县| 阳泉市| 黑山县| 周宁县| 宁乡县| 独山县| 吉木乃县|