一种实用的Struts+Spring整合策略

这种整合策略其实非常简单,其思路是将获取业务的逻辑组件的方式放在父类中,其余的action则从父类中获取,下面是BaseAction的代码

public   class  BaseAction  extends  ActionSupport {
    
public Object getBean(String beanName){
        
return getWebApplicationContext().getBean(beanName);
    }

}

 具体的业务Action

 

public  LoginAction  extends  BaseAction {
   
public ValidBean getVB(){
      
return getBean("vb");
   }

   publicv ActionForward execute(......)
{
   }

}

这种策略的另一个好处是,可以自由的更换整合方式,其业务Action无需改变

假设我们要使用Spring IOC特性,则可以修改BaseAction如下:

 

public   class  BaseAction  extends  ActionSupport... {
   Object serviceObj;
   
public void setServiceObj(Object obj){
       
this.serviceObj=obj;
   }
  
   
public Object getBean(String beanName){
      
return this.serviceObj;
   }

}

这里的beanName实际上是没用的

我们还需要修改struts-config.xml,以使用DelegationRequestProcessor来实现整合

 

 

< action  path ="/login"  name ="loginForm" ></ action >    <!-- -这里并不配置type属性 -->
< Controller  proccessorClass ="org.springframework.web.struts.DelegatingRequestProccessor" />
< plug-in  ClassName ="org.springframework.web.struts.ContextLoaderPlugIn" >
   
< set-property  property ="contextConfigLocation"  value ="/WEB-INF/applicationContext.xml" />
</ plug-in >

 

spring的配置文件做如下配置

 

< bean  name ="/login"  class ="lee.LoginAction"  singleton ="false" >
   
< property  name ="serviceObj" >
      
< ref  bean ="obj" />   
   
</ property >
</ bean >

 

 

这种策略有三个好处

1.可以在不同的整合策略中自由切换
2.避免重复创建DelegatingActionProxy实例
3.使业务Action不受侵入,避免代码污染

你可能感兴趣的:(一种实用的Struts+Spring整合策略)