Struts与Spring整合:bbp project

本文介绍了一种Struts与Spring框架的整合方法,通过自定义请求处理器ServiceAutowireRequestProcessor实现Struts动作的Spring注入,简化了配置并降低了框架间的耦合。

(注:在我的opensource里,还struts与spring的三种整合方式,都很好,是我转载别人的,在看他们俩整合时,不要忘记参看。)

our project user spring and structs method summerize:

 

1、首先,我们在struts-config.xml文件中,存在以下语句,目的是把struts动作委托给一个类来处理:

    <action-mappings>                                          (注:type的书写是正常的)

      <action path="/search/user" parameter="type" type="com.innov8tion.action.UserAction" scope="request">
      <forward name="user" path="/search/user.jsp" redirect="false" />
      </action>                                                      

    </action-mappings>

    

    <controller processorClass="com.innov8tion.action.ServiceAutowireRequestProcessor" />   //重要

 

2、写ServiceAutowireRequestProcessor类:

import org.apache.struts.action.RequestProcessor;

public class ServiceAutowireRequestProcessor extends RequestProcessor {
     /**
      * Override the base class method to return the autowireService action.
      */
     protected Action processActionCreate(HttpServletRequest request,
           HttpServletResponse response, ActionMapping mapping)
           throws IOException {
          Action action = super.processActionCreate(request, response, mapping); //用Struts创建默认的action
          autowireService(action);                                                             //用spring注入action中的属性
          return action;
     }

     private void autowireService(Action action) {
  
          ServiceLocator.getInstance(action).autowireService(action);    //ServiceLocator是我们自己写的类。
     }

}

 

public final class ServiceLocator {

     private static ServiceLocator instance = null;

     private ApplicationContext context = null;

     /**
      * Create a new ServiceLocator Instance.
      */
     private ServiceLocator(ApplicationContext context) {
          this.context = context;
     }

     /**
      * @return ServiceLocator Instance
      */
     public static ServiceLocator getInstance(Action action) {
          ServletContext servletContext = action.getServlet().getServletContext();

          if(instance == null){   
               ApplicationContext ctx = WebApplicationContextUtils.
                    getRequiredWebApplicationContext(servletContext);
               instance = new ServiceLocator(ctx);
         }
  
          return instance;
     }

     public void autowireService(Object bean) {
          ((AbstractApplicationContext) context).getBeanFactory()
                .autowireBeanProperties(bean,
                    AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false);
     }

}

 

总结:

     1. 在ServiceLocator类中的autowireService方法,目的是使用spring IOC自动绑定功能来注入action中的属性。

    2. 在ServiceAutowireRequestProcessor  类中的processActionCreate方法,我觉得其不仅让struts与spring耦合很小,而且在spring配置文件中,省写了struts的action的配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值