<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    kapok

    垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      455 隨筆 :: 0 文章 :: 76 評論 :: 0 Trackbacks

    http://forum.javaeye.com/viewtopic.php?t=9939&highlight=spring+autowire

    xwork-option項目中,新增了一種更簡單的實現WebWork和Spring集成的方案。它只要一個攔截器ActionAutowiringInterceptor就可以搞定!并且是自動為Action組裝它所需的Spring容器中的Bean,也就是不用在每個Action中逐個配置所需的Bean。
    配置步驟:
    1、在Web.xml文件中配置Spring Application Context: java代碼: 
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    2、在xwork.xml文件中定義ActionAutowiringInterceptor,并配置到相應的Action中:
    java代碼: 

    <interceptor name="autowire" class="com.opensymphony.xwork.spring.interceptor.ActionAutowiringInterceptor">
        <param name="autowireStrategy">
    @org.springframework.beans.factory.config.AutowireCapableBeanFactory@AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE
        </param>
      </interceptor>

    可以自己設置Bean組裝的策略,上面的定義是根據類型組裝。如果不設置,默認情況是根據Bean的名稱組裝。
    詳細參考:http://wiki.opensymphony.com/display/WW/WebWork+2+Spring+Integration
    ActionAutowiringInterceptor主要代碼如下:
    java代碼: 
    protected void before(ActionInvocation invocation) throws Exception {
        if (!initialized) {
          ApplicationContext applicationContext = (ApplicationContext)ActionContext.getContext().getApplication().get(
              WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

          if (applicationContext == null) {
            log.warn("ApplicationContext could not be found.  Action classes will not be autowired.");
          } else {
            setApplicationContext(applicationContext);
            factory = new SpringObjectFactory();
            factory.setApplicationContext(getApplicationContext());
            if (autowireStrategy != null) {
              factory.setAutowireStrategy(autowireStrategy.intValue());
            }
          }
          initialized = true;
        }
       
        if (factory == null)
          return;

        Action bean = invocation.getAction();
        factory.autoWireBean(bean);
       
        ActionContext.getContext().put(APPLICATION_CONTEXT, context);
      } 
     


    http://forum.javaeye.com/viewtopic.php?p=54959#54959

    webwork2 + spring 結合的幾種方法的小結

    參考:
    http://wiki.opensymphony.com/display/WW/WebWork+2+Spring+Integration
    http://forum.javaeye.com/viewtopic.php?t=8509
    http://forum.javaeye.com/viewtopic.php?t=9939

    下載:
    http://xwork-optional.dev.java.net/


    昨天使用webwork和spring,使用的是SpringObjectFactory方法,突然發現validator沒發生作用,折騰半天,
    換成external-ref的方法,可以了.但是覺得external-ref的方法太麻煩了.
    就是去http://xwork-optional.dev.java.net/下載了一下最新的源碼,換回SpringObjectFactory的方式,發現問題解決了(重載getClassInstance解決了這個問題).

    于是仔細研究了一下幾種組合的方法,根據前面參考中的文章,整理了一下.

    看了xwork-optional的源碼,發現其實三種方法的源碼都包含在這里了,當然也包括external-ref這種方法的源碼,只是換了包名和文件名,但是源碼基本沒變.你可以仔細看看.

    1.External-Ref

    這種方法看起來比較煩瑣,可能現在都改用第3種方法了.

    第一步:在web.xml里面增加一個listener,如下

    java代碼: 

                    <listener>
                            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                    </listener>
                   
                    <listener>
                            <listener-class>com.opensymphony.xwork.spring.SpringExternalReferenceResolverSetupListener</listener-class>
                    </listener>
     


    第二步:在Spring里面配置類似Dao之類的bean,例如

    java代碼: 

                    <bean id="myDAO" class="com.ryandaigle.persistence.MyDAO" singleton="true" />
     


    第三步:配置XWork.xml,例如

    java代碼: 

                    <package name="default" extends="webwork-default"
                            externalReferenceResolver="com.opensymphony.xwork.spring.SpringExternalReferenceResolver">               
                            <interceptors>
                                    <interceptor name="reference-resolver" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/>
                                    <interceptor-stack name="myDefaultWebStack">
                                            <interceptor-ref name="defaultStack"/>
                                            <interceptor-ref name="reference-resolver"/>
                                    </interceptor-stack>
                            </interceptors>
                           
                            <default-interceptor-ref name="myDefaultWebStack"/>
                           
                            <action name="myAction" class="com.ryandaigle.web.actions.MyAction">
                                    <external-ref name="DAO">myDAO</external-ref>
                                    <result name="success" type="dispatcher">
                                            <param name="location">/success.jsp</param>
                                    </result>
                            </action>
                   
                    </package> 
          
    2.SpringObjectFactory
    我一直用這種方法,因為以前覺得是xwork本身提供的方法,升級有保障.

    配置方法:
    第一步.在spring的 applicationContext.xml (根據實際情況決定) 里面定義你的action,例如

    java代碼: 

                    <bean name="some-action" class="fully.qualified.class.name" singleton="false">
                        <property name="someProperty"><ref bean="someOtherBean"/></property>
                    </bean> 
                   
     可以看到,可以使用Spring的特性來給你的action設置屬性等,當然也可以使用Spring的攔截器等 (可以使用不一定等于推薦使用)

    注意一定是singleton="false",因為xwork的action是這樣要求的.

    第二步.在xwork.xml里定義你的action定義

    java代碼: 

                    <action name="myAction" class="some-action">
                        <result name="success">view.jsp</result>
                    </action> 
     第三步.要使上面的關聯生效,還要用我們的SpringObjectFactory來替換Xwork的默認ObjectFactory.
    最新的SpringObjectFactory里面,有兩種方法,其中我覺得A方法更直觀一些.

    A:修改web.xml

    java代碼: 

                                <!-- 這個是spring的listener,可以改為你的自定義的spring的Listenter -->
                            <listener>
                                    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                            </listener>
                           
                   
                            <!-- 這個必須在 Spring ContextLoaderListener 的后面 -->
                            <listener>
                              <listener-class>com.opensymphony.xwork.spring.SpringObjectFactoryListener</listener-class>
                            </listener>
     B.在spring的applicationContext.xml (根據實際情況決定)里面定義一個bean,例如

    java代碼: 

                        <bean id="spring-object-factory" class="com.opensymphony.xwork.spring.SpringObjectFactory"
                                init-method="initObjectFactory"/>
     這樣Spring會自動調用initObjectFactory方法來替換Xwork的默認ObjectFactory

    3.ActionAutowiringInterceptor
    這個方法是最近出現的,可能是最簡潔的方法,但是不知道性能上有沒有問題,我覺得jdk1.4以后應該沒有任何問題吧,至于實際效果你的自己測試一下.

    第一步:配置web.xml
    java代碼: 

                                <!-- 這個是spring的listener,可以改為你的自定義的spring的Listenter -->
                            <listener>
                                    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
                            </listener> 
           
     第二步配置xwork.xml里面的攔截器

    java代碼: 

                    <interceptors>
                      <interceptor name="autowire" class="com.opensymphony.xwork.spring.interceptor.ActionAutowiringInterceptor">
                        <param name="autowireStrategy">@org.springframework.beans.factory.config.AutowireCapableBeanFactory@AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE</param>
                      </interceptor>
                      <interceptor-stack name="autowireDefault">
                        <interceptor-ref="autowire" />
                        <interceptor-ref="defaultStack" />
                      </interceptor-stack>
                    </interceptors>

     你的攔截器里都要包含autowire,例如這個autowireDefault就相當于以前的默認的攔截器了.
    其中的攔截器策略可以配置,上面配置的是根據類型,如果不配置,默認是根據名字.

    一共有四種策略:
    AUTOWIRE_CONSTRUCTOR
    AUTOWIRE_BY_TYPE
    AUTOWIRE_BY_NAME
    AUTOWIRE_AUTODETECT

    這種方法執行原理就是查找你的action的所有字段,如果和Spring的定義bean有相同的,就自動設置.

    假設你的Spring的applicationContext.xml里面有這樣一個定義:

    java代碼: 

                <bean id="userManager" class="com.test.UserManager" />

     如果你在xwork.xml 里面定義的某個action有一個字段叫userManager,那么在運行時刻就會自動被設置為Spring的配置文件里定義的Bean.

    以上如有不對指出,還請指出 

    上一次由scud于2005-1-07 周五, 下午5:40修改,總共修改了4次

    posted on 2005-03-12 16:52 笨笨 閱讀(2397) 評論(0)  編輯  收藏 所屬分類: HibernateAndSpringALL
    主站蜘蛛池模板: 日本精品人妻无码免费大全| 精品在线免费观看| 黄色成人网站免费无码av| 亚洲成人高清在线观看| 最近中文字幕大全免费视频| 亚洲福利在线观看| 久久成人国产精品免费软件| 亚洲精品美女在线观看播放| 2021精品国产品免费观看| 亚洲精品白色在线发布| 免费h片在线观看网址最新| 亚洲制服丝袜精品久久| 成人午夜大片免费7777| 亚洲欧美国产精品专区久久| 日本不卡免费新一二三区| 国产亚洲福利一区二区免费看| 亚洲精品视频免费| 精品国产麻豆免费人成网站| 91亚洲国产成人久久精品网站| 97视频热人人精品免费| 国产AV无码专区亚洲AV蜜芽| 国产亚洲自拍一区| 免费国产黄网站在线观看可以下载 | 亚洲AV无码一区二区三区人| 日韩av无码成人无码免费| 美女被免费网站在线视频免费| 国产精品亚洲αv天堂无码| 国产一级黄片儿免费看| 亚洲国产精品久久久久秋霞影院| 18禁超污无遮挡无码免费网站国产 | 一级一级毛片免费播放| 亚洲国产精品无码一线岛国| 免费福利网站在线观看| 美女露100%胸无遮挡免费观看| 亚洲精品中文字幕无码蜜桃| 18禁男女爽爽爽午夜网站免费| 亚洲精品中文字幕无码A片老| 久久久久国产亚洲AV麻豆| 最近免费中文字幕大全高清大全1| 亚洲欧洲无码一区二区三区| 亚洲国产成人精品无码区在线观看|