在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。
句。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。