コツ3.動作管理をSpring(三)に委託する

4554 ワード

コツ3.動作管理をSpringに委託する
より良い解決方法はStrut動作管理をSpringに委託することです.struts-configの動作マッピングにエージェントを登録することによって実現することができます.エージェントは、Spring環境におけるStruts動作の検索を担当する.Springの制御の下で動作するので、動作のJavaBean属性を充填し、SpringのAOPブロッカーなどの特性を適用することが可能となります.
リスト5のActionは、リスト4と同じです.しかし、struts-configにはいくつかの違いがあります.
リスト5.Spring統合の依頼方法

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <form-beans> <form-bean name="searchForm" type="org.apache.struts.validator.DynaValidatorForm"> <form-property name="isbn" type="java.lang.String"/> </form-bean> </form-beans> <global-forwards type="org.apache.struts.action.ActionForward"> <forward name="welcome" path="/welcome.do"/> <forward name="searchEntry" path="/searchEntry.do"/> <forward name="searchSubmit" path="/searchSubmit.do"/> </global-forwards> <action-mappings> <action path="/welcome" forward="/WEB-INF/pages/welcome.htm"/> <action path="/searchEntry" forward="/WEB-INF/pages/search.jsp"/> <action path="/searchSubmit" type="org.springframework.web.struts.DelegatingActionProxy" |(1) input="/searchEntry.do" validate="true" name="searchForm"> <forward name="success" path="/WEB-INF/pages/detail.jsp"/> <forward name="failure" path="/WEB-INF/pages/search.jsp"/> </action> </action-mappings> <message-resources parameter="ApplicationResources"/> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in> <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation" value="/WEB-INF/beans.xml"/> </plug-in> </struts-config> 
リスト5は典型的なstruts-config.xmlファイルで、小さな違いしかありません.Springエージェントクラスの名前を登録しています.ステートメント動作の類名ではなく、(1)に示されています.Delegating Actionxy類はアクションマッピング名を用いてSpring環境での動作を調べます.これは私たちがContextLoaderPlugInを使って宣言した環境です.
Struts動作をSpring beanとして登録するのは非常に直観的で、リスト6に示すように.動作マッピングを利用して、<bean>タグの名称属性(この例では「/searchSubmit」)を用いて、簡単にビーンを作成しました.この動作のJavaBean属性はどんなSpring beanのように充填されますか?
明細書6.Spring環境にStruts動作を登録する

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/> <bean name="/searchSubmit" class="ca.nexcel.books.actions.SearchSubmit"> <property name="bookService"> <ref bean="bookService"/> </property> </bean> </beans> 
動作依頼のメリット
動作委託解決方法はこの3つの方法の中で一番いいです.Struts動作はSpringを知らないので、コードを変更しないとSpringアプリケーションに使えます.RequestProcessorの変更はそれに影響を与えず、Spring AOP特性の利点を利用することができる.
動作依頼の長所はこれだけではない.SpringにStruts動作を制御させると、Springを使って動作に強い活力を与えることができます.例えば、Springがないと、Struts動作は全てスレッド安全でなければなりません.<bean>タグのsingleton属性が「false」である場合、どのような方法であっても、アプリケーションは各要求に新たに生成された動作オブジェクトがあります.この特性はいらないかもしれませんが、ツールボックスに入れてもいいです.Springのライフサイクル方法も利用できます.例えば、Struts動作を実行する際に、<bean>にマークされたinit−method属性を使用して、方法を実行する.同様に、ビーンを容器から削除する前に、destroy-method属性が実行される.これらの方法は高価なオブジェクトを管理する良い方法であり、Servletライフサイクルと同じ方法で管理される.