`
rainlife
  • 浏览: 234478 次
  • 性别: Icon_minigender_1
  • 来自: 我也来自火星?
社区版块
存档分类
最新评论

使用门面模式进一步地解耦Spring与Struts的整合

阅读更多

使用门面模式进一步地解耦SpringStruts的整合

 

首先自定义一个继承自Struts ActionBaseAction.java类,如下:

在这个代码中,只是简单地提供了一个insertUser(User user)的方法。

下面是实现这个接口的类ForumFacadeImpl的实现代码:

import org.rainlife.common.persistence.dao.base.IUserDao;
import org.rainlife.persistence.entity.User;
import org.rainlife.service.facade.IForumFacade;
public class ForumFacade implements IForumFacade
...{
    private IUserDao userDAO;
    public void insertUser(User user) ...{
        this.userDAO.makePersistent(user);
        
    }
    public void setUserDAO(IUserDao userDAO) ...{
        this.userDAO = userDAO;
    }
}
 

这个类是IForumFacade接口的实现类,在这个类里面,拥有一个IUserDao的属性,并且提供一相应的set方法,这样,我们就可以使用Spring的依赖注入将注入相应DAO实现。在insertUser()方法的实现代码中,直接调用 IUserDao中的makePersistent()方法来实现User对象的持久化(这里我使用的是Hibernate持久层)

 

下面来看一下在Spring中的Bean的配置,如下:

<bean id="userDao" class="org.rainlife.common.persistence.dao.hibernate.UserDaoHibernate" autowire="byType"/>
 

 

首先配置一个userDaoBean,它的class属性指向实现IUserDao的实现类UserDaoHibernate,并且通过autowire来实现自动装配。

下面是配置ForumFacade:

<bean id="forum" class="org.rainlife.service.facade.impl.ForumFacade">
    <property name="userDAO">
        <ref bean="userDao"/>
    </property>
</bean>
 

这里配置了一个id”forum”Bean,并且将userDao注入到了ForumFacade中。

在上面的BaseAction就可以通过getBean(“forum”)来获得ForumFacade的实例。

 

下面来看一下一个具体的Struts Action是如何写的,如下:

public class RegisterAction extends BaseAction ...{

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception ...{
        RegisterForm form = (RegisterForm) form;
        User user = new User();
        user.setUsername(form.getUsername());
        user.setPassword(form.getPassword());
        //通过IForumFacade门面来获取我们需要的业务方法
        getForum().insertUser(user);
        mapping.findForward("success");
    }
}
 

 可以看到,这个RegisterAction继承自我们自己的BaseAction,可以直接使用getForum().insertUser(user)方法来持久化User对象。

这样,在Struts的配置文件struts-config.xml中,就不需要使用Spring的代理类DelegatingActionProxy

 

Action委托给Spring进行管理,而在Spring的配置文件beans.xml中也并不用采用

<bean name=”/register”class=”org.rainlife.forum.web.struts.action.RegisterAction”>

 的这种方式来管理相应的Action了。

import javax.servlet.ServletContext;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionServlet;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.rainlife.service.facade.IForumFacade;

/**
 * 用作Struts Action的基类,我们编写的Struts Action类都从BaseAction继承
 * 由此得到IForumFacade对象,从而访问服务层的业务方法。
 * @author rainlife
 *
 */
public abstract class BaseAction extends Action
{
    private IForumFacade forum;

    public IForumFacade getForum()
    {
        return forum;
    }
    
    /**
     * 从Spring上下文中得到IForumFacade对象。
     */
    @Override
    public void setServlet(ActionServlet actionServlet)
    {
        super.setServlet(actionServlet);
        if (actionServlet != null)
        {
            ServletContext servletContext = actionServlet.getServletContext();
            WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
            this.forum = (IForumFacade) wac.getBean("forum");
        }
    }
}
 

 

这个BaseAction.java调用setServlet(ActionServlet actionServlet)方法将Spring的上下文环境附加入Struts中。这样的话,当我们的每一个具体的Action需要获取某一个服务方法的时候,只需要调用getForm()就可以了。

在上面的代码中,我们可以看到,还定义了一个IForumFacade接口(”I”开头,表示此类为一个接口类),下面看一下这个IForumFacade接口的代码:


import org.rainlife.persistence.entity.User;
public interface IForumFacade
{
    public void insertUser(User user);
}
 
分享到:
评论

相关推荐

    Spring与Struts 2整合.zip

    在"Spring与Struts 2整合.zip"这个压缩包中,可能包含了一系列的配置文件、源代码和示例项目,帮助开发者了解和学习如何将这两个框架有效地结合在一起。通过学习和实践这些材料,开发者可以掌握在实际项目中整合...

    Spring与Struts2整合

    Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,而Struts2则以其优秀的MVC设计模式著称,两者整合可以构建出高效、可维护的Web应用。下面将详细介绍Spring与Struts2整合的相关知识点。 **一、整合背景*...

    spring_struts整合jar包

    2. **Spring MVC与Struts2的集成**:虽然两者都有MVC模式,但在整合时,通常会使用Struts2来处理请求的路由和响应,而Spring MVC则处理更复杂的视图解析和数据绑定。 3. **Spring事务管理**:Spring提供了强大的...

    整合Spring与Struts的几种方法

    这是最灵活的整合方式,因为它完全解耦了Struts Action与Spring,使得Action完全受Spring控制。 以HelloWorld为例,我们来看看第三种方法的具体实现步骤: **Step 1**:修改`struts-config.xml`,将所有的Action...

    Spring 和 struts 整合的三种方式

    以下将详细阐述Spring与Struts整合的三种方式: 1. **使用Spring的ActionSupport** 这种方式是通过让Struts的Action类继承Spring的`ActionSupport`类,使Action类能够访问Spring的ApplicationContext。首先,在`...

    spring+struts2整合源码

    通过以上步骤,我们可以成功地整合Spring和Struts2,实现一个完整的MVC架构。这样的整合使得我们可以充分利用Spring的IoC和AOP特性,以及Struts2的MVC模型,构建出更加灵活、可扩展的Java Web应用。提供的源码应包含...

    spring &struts整合

    通过整合 Spring 和 Struts2,我们可以利用 Spring 的强大功能来管理应用程序的生命周期,同时利用 Struts2 的 MVC 架构和拦截器机制来处理 Web 请求,实现高效、解耦的 Java Web 应用程序开发。

    struts 整合spring 例子,测试通过

    Struts2 和 Spring 整合是Java开发中常见的实践,主要目的是为了利用Spring的强大功能,如依赖注入(DI)和面向切面编程(AOP),同时保持Struts2的MVC架构的优势。以下是对整合过程的详细说明: 首先,Spring框架...

    spring hibernate struts整合

    然而,随着技术的发展,Spring Boot和Spring MVC的出现,现在更多地推荐使用Spring Boot进行一站式开发,因为它已经内置了对Hibernate和Struts的替代方案,如Spring Data JPA和Spring MVC,简化了整合过程,提高了...

    Spring4.0.6+Struts2.3.16.3整合架包下载,ss整合jar架包下载,最新spring和struts整合架包下载

    这种整合可以构建出强大的企业级 Web 应用,通过 Spring 的 DI 和 AOP 能力来增强 Struts 2 的 MVC 模式,实现业务逻辑与控制层的解耦。 整合 Spring 和 Struts 的过程涉及以下几个关键步骤: 1. **添加依赖**:在...

    Spring整合集成Struts1.2最简单例子

    将Spring与Struts1.2整合,可以利用Spring的强大功能来管理Struts的Action和业务逻辑,提高代码的可测试性和可维护性。 4. **整合步骤** - **配置Spring**:首先创建Spring配置文件(如`applicationContext.xml`...

    ibatis spring struts 整合案例

    Spring还包含一个强大的数据访问抽象层,可以方便地与各种持久层技术(如Ibatis)集成。 Struts是经典的MVC框架,它定义了请求的生命周期,以及模型、视图和控制器之间的交互。当用户发送请求时,Struts拦截请求,...

    hibernate+spring+struts整合开发jar文件

    在实际项目中,使用hibernate+spring+struts整合开发可以带来以下优势: - 提高开发效率:由于框架之间的良好集成,开发者可以更专注于业务逻辑,而不是底层的配置和集成问题。 - 降低耦合:Spring的依赖注入使得各...

    hibernate-spring-struts整合手册

    ### hibernate-spring-struts整合手册:构建三层架构的Web应用程序 #### 一、引言与目标 在《hibernate-spring-struts整合手册》中,作者Hantsy Bai旨在展示如何结合strutsMVC框架、Spring中间层以及Hibernate后端...

    Spring和Struts整合---继承ActionSupport的方法

    **Spring与Struts整合的核心目标** 1. **依赖注入(DI)**: Spring的DI允许我们解耦组件,使得代码更加灵活和可测试。通过整合,我们可以使用Spring管理Struts的Action类,从而实现对Action的依赖注入。 2. **AOP...

    Spring框架以及与Struts、Mybatis的整合

    Spring与Struts2、Mybatis整合后形成的SSM框架,是目前Java开发中广泛使用的一种架构模式。 **Spring框架基础** Spring框架主要由以下几个核心概念构成: 1. **控制反转(Inversion of Control,IoC)**:是一种...

    struts2_mybatis_spring_框架实例整合_数据库 文档

    Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...

    Struts Spring Hibernate整合实践

    1. **Spring 与 Struts 整合**: - **ActionSupport 方式**:将 Struts Action 类继承自 Spring 的 ActionSupport 类,但这样会导致 Struts Action 与 Spring 紧耦合,不利于后期扩展或更换框架。 - **...

    spring和Struts1整合

    Spring 和 Struts1 整合是企业级 Java Web 开发中的常见实践,它结合了 Spring 框架的依赖注入和事务管理能力与 Struts1 的 MVC 设计模式,为应用提供更强大的控制层和业务逻辑处理。在这个整合中,Spring 作为底层...

    struts和spring整合的2种方式

    在实际应用中,随着Struts2的出现和Spring Boot的流行,这种Struts1与Spring的整合方式逐渐被新的框架组合取代,如Spring MVC或Spring Boot的WebFlux。然而,对于学习和理解框架整合以及依赖注入的概念,这些基础...

Global site tag (gtag.js) - Google Analytics