基于webwork spring hibernate 項目的開(kāi)發(fā)
這三者的結合,應該是java web編程最好的模式。
首先說(shuō)明三者各自負責的職務(wù):
1 hibernate 負責數據庫的操作
2 spring 負責真正的業(yè)務(wù)操作
3 webwork 負責請求轉交,并把spring的處理結果返回給用戶(hù)
以往的開(kāi)發(fā)中,很多人注重MVC模式。的確,這種模式把程序以面向對象的思想分成 了三個(gè)部分。但在web開(kāi)發(fā)中,并不能單純的運用此種模式:web開(kāi)發(fā)的View是固定的(頁(yè)面),而在引入hibernate后,model這一塊也非常簡(jiǎn)單和清晰。就剩下control了,這是web開(kāi)發(fā)的關(guān)鍵部分,現在流行的做法便是將control細分成兩個(gè)部分:dispacher(轉交器)和business object(處理業(yè)務(wù)邏輯的對象)。并將后者抽出接口,甚至和model共享接口,一邊真正做到對dispacher隱藏邏輯實(shí)現。
而這種M-V-D-B(model-view-dispacher-business object)模式的實(shí)現有好多方式。比如一個(gè)bo(business object)對象的創(chuàng )建,你可以直接 new,也可以動(dòng)態(tài)加載,采用工廠(chǎng)方法,抽象工廠(chǎng)。但最好的就是用spring容器。dispacher只管用接口就行了,具體類(lèi)已經(jīng)有spring的 AOP給注入了。
當然spring也可以很好地和hibernate結合,你可以采用DAO,也可以用spring的hibernate 模板。但這都不重要,因為你的業(yè)務(wù)對象已經(jīng)和調用層徹底分開(kāi)了,當業(yè)務(wù)層需要和hibernate打交道的時(shí)候,直接做個(gè)HibernateUtil也未嘗不可呀。怎么做都已經(jīng)不是關(guān)鍵。
下面就具體介紹spring webwork的結合方式。
在webwork 中的wiki doc中有三種結合方式(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);


