隨筆-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方式  回復  更多評論
            
          主站蜘蛛池模板: 兴海县| 神木县| 安义县| 织金县| 枣强县| 句容市| 东平县| 堆龙德庆县| 清徐县| 孝昌县| 吉安县| 海口市| 广饶县| 嘉峪关市| 桑植县| 涟水县| 彝良县| 德兴市| 凉山| 金坛市| 泰来县| 文昌市| 宁陕县| 延边| 尉氏县| 遵义市| 仲巴县| 东丰县| 隆回县| 开远市| 伊吾县| 中西区| 涿鹿县| 宣武区| 贵德县| 小金县| 崇仁县| 麻阳| 德庆县| 明水县| 乌拉特后旗|