隨筆-193  評論-715  文章-1  trackbacks-0
          本Blog所有內容不得隨意轉載,版權屬于作者所有。如需轉載請與作者聯系( fastzch@163.com )。
          未經許可的轉載,本人保留一切法律權益。


          我曾經在我的文章《搭建SSH時的思考和遇到的幾個問題》中寫過,我為何要使用AutowiringRequestProcessor來作為Struts與Spring集成時的解決方案,如果不知道這個Processor的作用和不了解用意的朋友,可以再看看那篇文章。

          今天要說的問題是在使用這個Processor中的一個問題。在那篇文章中,我曾提到過,支持byName和byType兩種方式,默認是byType方式,但有時候使用byType可能不行,比如:
          我想使用Spring自帶的聲明式事務,這東東很是不錯,不用我操心事務的處理,相信大家也都比較喜歡,比如我的事務定義?如下:
          ????<bean?id="TransactionAttributeSource"
          ????????class
          ="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
          ????????
          <property?name="properties">
          ????????????
          <props>
          ????????????????
          <prop?key="add*">PROPAGATION_NESTED</prop>
          ????????????????
          <prop?key="delete*">PROPAGATION_NESTED</prop>
          ????????????
          </props>
          ????????
          </property>
          ????
          </bean>
          那么我的Service類就應該定義成這樣:
          <bean?id="groupInfoService"
          ????????class
          ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ????????
          <property?name="proxyInterfaces">
          ????????????
          <list>
          ????????????????
          <value>
          ????????????????????com.eric.ocgweb.biz.vpmn.IGroupInfoService
          ????????????????
          </value>
          ????????????
          </list>
          ????????
          </property>
          ????????
          <property?name="target">
          ????????????
          <ref bean="groupInfoServiceImpl">
          ????????
          </property>
          ????????
          <property?name="transactionManager">
          ????????????
          <ref?bean="TransactionManager"?/>
          ????????
          </property>
          ????????
          <property?name="transactionAttributeSource">
          ????????????
          <ref?bean="TransactionAttributeSource"?/>
          ????????
          </property>
          ????
          </bean>
          然后我還得定義一個groupInfoServiceImpl的Bean,在此省略。

          根據Spring的DOC所說,如果想使用byName的方式來自動裝載,通過如下配置來實現,修改web.xml中對于Struts所用的ActionServlet的定義:
          <servlet>
          ????????
          <servlet-name>action</servlet-name>
          ????????
          <servlet-class>
          ????????????org.apache.struts.action.ActionServlet
          ????????
          </servlet-class>
          ????????
          <init-param>
          ????????????
          <param-name>config</param-name>
          ????????????
          <param-value>/WEB-INF/struts-config.xml</param-value>
          ????????
          </init-param>
          ????????
          <init-param>
          ????????????
          <param-name>autowire</param-name>
          ????????????
          <param-value>byName</param-value>
          ????????
          </init-param>
          ????????
          <init-param>
          ????????????
          <param-name>dependencyCheck</param-name>
          ????????????
          <param-value>true</param-value>
          ????????
          </init-param>
          ????????
          <init-param>
          ????????????
          <param-name>debug</param-name>
          ????????????
          <param-value>3</param-value>
          ????????
          </init-param>
          ????????
          <init-param>
          ????????????
          <param-name>detail</param-name>
          ????????????
          <param-value>3</param-value>
          ????????
          </init-param>
          ????????
          <load-on-startup>0</load-on-startup>
          ????
          </servlet>

          但是在我這樣修改之后,當應用程序在運行的時候,會提示說找到了兩個Bean,一個是groupInfoService,另一個是groupInfoServiceImpl,似乎并沒有byName。

          所以我不得不采用下面這種形式來定義Spring中的Bean:
          <bean?id="groupInfoService"
          ????????class
          ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ????????
          <property?name="proxyInterfaces">
          ????????????
          <list>
          ????????????????
          <value>
          ????????????????????com.eric.ocgweb.biz.vpmn.IGroupInfoService
          ????????????????
          </value>
          ????????????
          </list>
          ????????
          </property>
          ????????
          <property?name="target">
          ????????????
          <bean?class="com.eric.ocgweb.biz.vpmn.GroupInfoService">
          ????????????????
          <property?name="groupInfoLogic">
          ????????????????????
          <ref?bean="GroupInfoLogic"?/>
          ????????????????
          </property>
          ????????????
          </bean>
          ????????
          </property>
          ????????
          <property?name="transactionManager">
          ????????????
          <ref?bean="TransactionManager"?/>
          ????????
          </property>
          ????????
          <property?name="transactionAttributeSource">
          ????????????
          <ref?bean="TransactionAttributeSource"?/>
          ????????
          </property>
          ????
          </bean>
          這樣,自動裝載時就只能找到一個Bean的定義了,就不會報不惟一的錯了。
          posted on 2008-02-24 00:20 Robin's Programming World 閱讀(2341) 評論(1)  編輯  收藏 所屬分類: Java

          評論:
          # re: Struts與Spring集成時使用AutowiringRequestProcessor產生的問題及解法 2009-02-05 13:45 | ss
          似乎是spring.autowire來聲明byName方式  回復  更多評論
            
          主站蜘蛛池模板: 高平市| 奉节县| 双辽市| 磴口县| 木里| 福清市| 绿春县| 西宁市| 和田市| 固原市| 施秉县| 富民县| 信阳市| 监利县| 绥化市| 克什克腾旗| 碌曲县| 金阳县| 安丘市| 南皮县| 阳东县| 邓州市| 扎鲁特旗| 祥云县| 温泉县| 浦江县| 赤水市| 朝阳市| 璧山县| 池州市| 乐昌市| 陆良县| 剑川县| 达孜县| 金沙县| 西林县| 黄平县| 夏津县| 黄浦区| 黔西| 根河市|