基于webwork spring hibernate 項(xiàng)目的開發(fā)
這三者的結(jié)合,應(yīng)該是java web編程最好的模式。
首先說(shuō)明三者各自負(fù)責(zé)的職務(wù):
1 hibernate 負(fù)責(zé)數(shù)據(jù)庫(kù)的操作
2 spring 負(fù)責(zé)真正的業(yè)務(wù)操作
3 webwork 負(fù)責(zé)請(qǐng)求轉(zhuǎn)交,并把spring的處理結(jié)果返回給用戶
以往的開發(fā)中,很多人注重MVC模式。的確,這種模式把程序以面向?qū)ο蟮乃枷敕殖?了三個(gè)部分。但在web開發(fā)中,并不能單純的運(yùn)用此種模式:web開發(fā)的View是固定的(頁(yè)面),而在引入hibernate后,model這一塊也非常簡(jiǎn)單和清晰。就剩下control了,這是web開發(fā)的關(guān)鍵部分,現(xiàn)在流行的做法便是將control細(xì)分成兩個(gè)部分:dispacher(轉(zhuǎn)交器)和business object(處理業(yè)務(wù)邏輯的對(duì)象)。并將后者抽出接口,甚至和model共享接口,一邊真正做到對(duì)dispacher隱藏邏輯實(shí)現(xiàn)。
而這種M-V-D-B(model-view-dispacher-business object)模式的實(shí)現(xiàn)有好多方式。比如一個(gè)bo(business object)對(duì)象的創(chuàng)建,你可以直接 new,也可以動(dòng)態(tài)加載,采用工廠方法,抽象工廠。但最好的就是用spring容器。dispacher只管用接口就行了,具體類已經(jīng)有spring的 AOP給注入了。
當(dāng)然spring也可以很好地和hibernate結(jié)合,你可以采用DAO,也可以用spring的hibernate 模板。但這都不重要,因?yàn)槟愕臉I(yè)務(wù)對(duì)象已經(jīng)和調(diào)用層徹底分開了,當(dāng)業(yè)務(wù)層需要和hibernate打交道的時(shí)候,直接做個(gè)HibernateUtil也未嘗不可呀。怎么做都已經(jīng)不是關(guān)鍵。
下面就具體介紹spring webwork的結(jié)合方式。
在webwork 中的wiki doc中有三種結(jié)合方式(google查),我這里采用的最后一種--采用一個(gè)自動(dòng)裝配的攔截器com.opensymphony.xwork.spring.interceptor.ActionAutowiringInterceptor關(guān)鍵代碼如下:
ApplicationContext applicationContext = (ApplicationContext)ActionContext.getContext().getApplication().get(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
factory = new SpringObjectFactory();
factory.setApplicationContext(getApplicationContext());
Action bean = invocation.getAction();
factory.autoWireBean(bean);
ActionContext.getContext().put(APPLICATION_CONTEXT, context);