`
esffor
  • 浏览: 1367401 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

低耦合的Struts集成Spring的实例

阅读更多

我们在集成Spring和struts的时候,往往习惯于使用spring提供的ActionSupport,然后使用getWebApplicationContext()方法获得spring的bean,这样固然方便,但有一个弊端,就是我们的struts action依赖了spring的api,增加了耦合,现在什么都流行高内聚,低耦合,spring为我们提供了代理的Struts action,这样,我们在struts-config.xml不再为path设置真正的action,而是设计spring的代理Action,然后由spring的代理action,去寻找在spring bean 容器中的真正的action,这样,我们的action是一个完全没有依赖于spring的action ,具体实现请看以下代码:

 

Action:

 

/**//*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 
*/

package action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import Service.StudentService;


public class ListStudentActionAction extends Action ...{
    
private StudentService studentService;
    
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) 
...{

        System.out.println(
this.studentService.getStudent().getName()+"--"+this.studentService.getStudent().getSex());
        
return null;
    }

    
//通过spring注入service
    public void setStudentService(StudentService studentService) ...{
        
this.studentService = studentService;
    }

    
    
}

 

Service:

 

package Service;

import Model.Student;

public class StudentService {

  public Student getStudent(){
     return new Student("name","sex");  
  }
}

 

applicationContext.xml

配置真正的strutsAction,并把service类注入

<?xml version="1.0" encoding="UTF-8"?>
<beans
    
xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean name="/listStudentAction" class="action.ListStudentActionAction">
  
<property name="studentService">
    
<bean class="Service.StudentService"/>
  
</property>
</bean>
</beans>

 

struts-config.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
  
<data-sources />
  
<form-beans />
  
<global-exceptions />
  
<global-forwards />
  
<action-mappings >
   
<!-- 不再真正的action,而注册spring的代理action
    <action path="/listStudentAction" type="action.ListStudentActionAction" />
      
-->
    
<action path="/listStudentAction" type="org.springframework.web.struts.DelegatingActionProxy" />


  
</action-mappings>

   
<message-resources parameter="ApplicationResources" />


 

   
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        
<set-property property="contextConfigLocation"
            value
="/WEB-INF/classes/applicationContext-service.xml"/>
    
</plug-in>
</struts-config>

需要说明的是,由于spring dtd规定id不能有"/",所以我们用name定义path,并且,spring bean的name要和struts-config.xml中的path一致

使用DelegatingActionProxy的好处就在于你可以用不用任何spring特定的类编写Struts Action,这个方法也有不足之处,就是不太直观,因为所有路径都映射到同一个类了

对于这种情况,spring也有解决方法,就是使用请求委托

首先,为struts-config.xml增加controller

 

  <!-- 使用请求委托 -->
 
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor">
 
</controller>

 

然后,修改我们的path定义位 <action path="/listStudentAction" type="action.ListStudentActionAction"/>

这样,又和我们单独使用struts的时候一样了,但内部还是让spring取代理我们的真正的action

需要说明的是,这里的type其实是个摆设,完全可以使用 <action path="/listStudentAction"/>,写上是为了解决我们上面提到的“不够直观的”的问题



分享到:
评论
1 楼 kainecy 2008-10-15  
StudentService 都不是接口.....

相关推荐

    第27讲--Struts与Spring集成方案1(Struts集成Spring)

    - **解耦**:Spring的管理机制使得Action类与Struts2框架的耦合度降低,方便代码的维护和扩展。 在SSH(Struts2、Spring、Hibernate)这样的经典Java EE架构中,Spring作为核心框架,整合了Struts2和Hibernate,...

    spring+hibernate+struts集成开发实例

    《Spring、Hibernate、Struts集成开发实例详解》 在当今的Web开发领域,Spring、Hibernate和Struts被誉为经典的“SSH”框架组合,它们各司其职,协同工作,为开发者提供了一个强大的企业级应用开发解决方案。Spring...

    Struts+spring简单实例

    7. ** strutsspring-plugin**:为了简化Struts和Spring的集成,存在strutsspring-plugin这个库,它可以自动将Spring管理的Bean暴露给Struts,减少了手动配置的工作。 8. **测试**:Struts+Spring的集成使得单元测试...

    Struts Hibernate Spring实例

    Spring 还集成了其他框架,如Struts和Hibernate,形成了所谓的“Spring全家桶”。 **整合Struts、Hibernate和Spring** 在实际项目中,这三个框架通常会结合使用,以实现高效、松散耦合的架构。Spring 可以作为整体...

    ibatis 整合 SS struts2 spring 实例cruiseWebsite(完整项目)

    本项目“ibatis 整合 SS struts2 spring 实例cruiseWebsite”就是一个这样的实例,它展示了如何将iBatis、Struts2和Spring三大主流框架集成在一起,构建一个完整的Web应用。下面我们将详细讨论这些知识点。 首先,...

    struts, spring, hibernate集成实例

    Struts、Spring和Hibernate是Java企业级开发中的三大框架,它们各自解决不同的问题,而将它们集成使用可以构建出高效、灵活且易于维护的Web应用。这个实例是关于如何在MyEclipse开发环境中将这三个框架整合在一起的...

    struts hibernate spring集成开发宝典光盘源码(二).rar

    Spring作为“胶水”,可以管理Struts的Action实例和Hibernate的数据访问组件,实现依赖注入,从而降低组件之间的耦合度。例如,Struts的Action类可以通过Spring注入Hibernate的DAO,进行数据操作。 通过分析这个...

    Struts+Spring开发实例

    2. **配置Struts**:在struts-config.xml中,配置Action的类为Spring的代理类(org.springframework.web.struts.ActionProxyFactoryBean),这样Struts会通过Spring来实例化Action。 3. **Action中的Service注入**:...

    struts2+spring实例程序

    开发者可以通过学习这个实例来理解Struts2的工作原理,以及如何与Spring框架集成。通过查看Action的实现,我们可以看到如何处理HTTP请求,以及如何调用Spring服务。查看配置文件,可以学习如何配置Struts2和Spring的...

    Spring与Struts集成方式一

    - 或者,使用Spring的Struts插件(`struts-spring-plugin.xml`),该插件会自动扫描Spring配置文件中的bean,并将它们作为Action实例注入到Struts中。 4. **异常处理**: - Spring提供了全局异常处理机制,可以...

    如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件

    在Struts+Spring的集成中,Spring可以管理Struts中的Action实例,通过DI降低Action与其他组件间的耦合。同时,Spring还提供了事务管理,便于在多层架构中处理数据库操作。 3. **Hibernate ORM**: Hibernate是一个...

    struts spring集成【下】

    2. **Struts2-Spring插件**:为了实现Struts2和Spring的集成,我们需要引入Struts2-Spring插件。这个插件允许我们在Struts2的配置中直接引用Spring管理的bean,避免了在Action类中手动创建服务实例。 3. **Action类...

    struts2,spring集成 实例

    集成Struts2和Spring主要是为了将Spring的依赖注入特性引入到Struts2的Action中,这样Action类可以直接依赖于Spring管理的Bean,无需在Action类中进行实例化。以下是集成的几个关键步骤: 1. **配置Spring**:首先...

    Spring+Hibernate+Struts集成实例

    这个集成实例可能包含了这些文件:配置文件(如struts.xml、spring-context.xml、hibernate.cfg.xml)、实体类(Entity.java)、DAO接口及其实现(DAOInterface.java、DAOImpl.java)、Service接口及其实现(Service...

    struts整合spring开发实例

    Struts和Spring是两个在Java Web开发中广泛使用的框架,它们各自解决了一部分问题,而将两者整合可以进一步提升应用的灵活性和可维护性。Struts主要负责MVC(Model-View-Controller)架构中的控制层,而Spring则是一...

    struts+spring+hibernate整合

    5. **修改Action配置**:将Action类型更改为`DelegatingActionProxy`,以使Struts委托给Spring来管理Action实例。 6. **配置Spring**:在`applicationContext.xml`中定义Bean,比如这里的`LoginAction`,使得Spring...

    struts+spring

    Struts1.3是一款基于MVC(Model-View-Controller)设计模式的框架,主要用于控制应用程序的流程,而Spring2.5则是一个全面的轻量级应用框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,以及对其他框架的...

    中文Struts+Spring+Hibernate整合开发迅雷

    - 集成Spring:在struts-config.xml中配置Spring的ActionServlet,使用Spring的Action代理来实例化Action类。 - 配置Spring:创建spring配置文件,定义Bean,包括Action、Service和DAO。 - 集成Hibernate:配置...

    Struts2_Spring_Hibernate整合开发实例

    在"Struts2_Spring_Hibernate整合开发实例"中,我们将深入探讨如何将这三个框架集成到一个项目中,实现无缝协作。这个实例提供了详细的步骤和代码示例,帮助开发者快速理解和掌握整合过程。 首先,Struts2的集成...

    Struts2 Spring2.5集成:系统登陆demo--带lib可直接运行

    在Struts2的Action类中,我们可以利用Spring的@Autowired注解,由Spring自动注入所需的Service或DAO实例,减少了代码的耦合度。 2. **Struts2-Spring插件**:为了实现Struts2和Spring的集成,我们需要使用Struts2...

Global site tag (gtag.js) - Google Analytics