`

ssh中整合,为什么将Action交由Spring托管,才可以在Action中使用依赖注入!

阅读更多
ssh中整合,为什么将Action交由Spring托管,才可以在Action中使用依赖注入!
传统正确的整合方式:
struts-config.xml:
<struts-config>
  <data-sources>
  <form-beans>
    <form-bean name="loginForm" type="com.yourcompany.struts.form.LoginForm">
  </form-beans>
  <action-mappings>
    <action <br="">      attribute="loginForm"
      input="/form/login.jsp"
      name="loginForm"
      path="/login"
      scope="request"
      type="org.springframework.web.struts.DelegatingActionProxy">  //使用代理
      <forward name="show" path="/show.jsp">
    </action>
  </action-mappings>
  <message-resources parameter="com.yourcompany.struts.ApplicationResources">
<plug-in classname="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml">
</plug-in>
</struts-config>

applicationContext.xml:
<beans>
<bean id="personDAO" class="com.deng.PersonDAO">

<bean name="/login" class="com.yourcompany.struts.action.LogAction">
<property name="personDAO" ref="personDAO">
</property>
</bean>
</beans>

web.xml:

<context-param>   
<param-name>contextConfigLocation</param-name>   

<param-value>/WEB-INF/applicationContext*.xml</param-value>   
</context-param>   
<listener>   
<listener-class>org.springframwork.web.content.ContextLoaderListener</listener-class>   
</listener> 


这样一来:我想在action里面注入server,只要在action里面
privaet PersonDAO personDAO;
public PersonDAO getPersonDAO() {
return personDAO;
}
public void setPersonDAO(PersonDAO personDAO) {
this.personDAO = personDAO;
}

就可以拿到personDAO对象想干吗就干吗了。。


我的问题是:

我前几天一个不小心有个问题没弄明白:为什么将Action交由Spring托管,才可以在Action中使用依赖注入!
我的:
struts-config.xml:
<action-mappings>
    <action <br="">      attribute="loginForm"
      input="/form/login.jsp"
      name="loginForm"
      path="/login"
      scope="request"
      type="com.yourcompany.struts.action.LogAction">  //不使用代理
      <forward name="show" path="/show.jsp">
    </action>

applicationContext.xml:
<beans>
<bean id="personDAO" class="com.deng.PersonDAO">

<bean name="/login" class="com.yourcompany.struts.action.LogAction">  //就象和<bean id="personDAO" class="com.deng.PersonDAO">一样<property name="personDAO" ref="personDAO">
</property>
</bean>
</beans>

然后在action里面
privaet PersonDAO personDAO;
..get()和..set()居然拿到的personDAO是空。为什么??

为什么:<bean id="personDAO" class="com.deng.PersonDAO">直接在spring里面直接写可以,而action非要托管才能注入,不能象server啊 dao之类的直接在applicationContext.xml里面写配置。



因为Action 类不是普通的类似于我们自己写的 dao层 或者service层 的类,

它是由Struts 框架来支持产生的,所以说不能简单的用类似于dao层或者 service层

的依赖注入方式来,所以要使用Spring 中的 DelegatingActionProxy(授权Action代理),实现了针对实际Action的调用代理,struts最终调用的将是由

spring管理的Action实例,这样客户端发送的各种请求就可以用spring的Ioc设计思

想实现了。

详细的可以百度一下 DelegatingActionProxy 的意思,其实本身struts框架中也包含这个的。
分享到:
评论

相关推荐

    ssh框架整合实现增删查改

    Spring还能够将Struts和Hibernate这两个框架无缝地集成在一起,通过Action类的Spring托管,实现对业务服务的调用。 在实现"ssh框架整合实现增删查改"的过程中,首先,我们需要配置这三个框架的依赖,如在`web.xml`...

    SSH框架整合完整版

    在实际开发中,开发者需要理解每个框架的核心功能,学习如何配置它们之间的协作,例如Spring如何管理Struts的Action和Hibernate的SessionFactory,以及如何在Struts中调用Spring托管的服务,最后通过Hibernate操作...

    SSH 整合lib

    6. **整合Hibernate与Spring**:在Spring中配置SessionFactory,并使用SessionFactoryBean,使得SessionFactory可以在Spring容器中被管理。同时,通过AOP配置实现事务管理。 7. **测试与运行**:编写测试用例,确保...

    ssh+cxf整合及单个cxf测试样例

    在SSH+CXF整合中,Struts的Action可以通过Spring的依赖注入获取到由CXF发布的服务,调用服务接口实现业务功能。为了使Struts能够与Spring无缝集成,通常会使用Spring-Struts插件,它使得Struts的Action可以直接声明...

    ssh框架整合实例

    SSH框架整合是Java Web开发中常见的一种技术组合,由Struts、Spring和Hibernate三个开源框架协同工作,构建出高效、可扩展的Web应用程序。这里我们深入探讨SSH框架整合中的核心概念、配置以及如何在实际项目中应用。...

    ssh_整合简单例子(详细步骤)

    7. **Spring与Hibernate整合** 选择将Hibernate的SessionFactory托管给Spring管理,这涉及到在Spring配置文件中定义SessionFactory Bean,并指定其ID。 8. **配置文件** 主要包括struts-config.xml(Struts配置)、...

    SSH整合

    SSH整合是指在软件开发中,将Struts、Spring和Hibernate这三个开源框架集成在一起,以实现高效、灵活且可维护的Web应用开发。SSH是Java Web开发中的三大神器,它们各自承担着不同的职责:Struts负责控制层,Spring...

    最详细的ssh框架整合讲解.pdf

    在开发过程中,SSH框架的优势在于解耦合和模块化,Struts负责控制流程,Spring提供依赖注入和事务管理,Hibernate则处理对象与数据库的映射。这样的架构使得代码更易于维护和扩展,提高了开发效率。 总结,SSH框架...

    基于MyEclipse的SSH整合.docx

    - 在整合过程中,需要将Hibernate配置托管给Spring管理,选择`Spring configuration file`,并指定已存在的Spring配置文件。 - 设置SessionFactory ID和数据源Bean ID,确保Spring可以正确管理和配置Hibernate的...

    ssh框架整合步骤讲解.pdf

    在MyEclipse中,添加Hibernate支持时,选择Spring托管Hibernate,将Hibernate配置文件与Spring配置文件关联起来,指定SessionFactory和数据源。 4. **实验环境**:MyEclipse6.5作为集成开发环境,Tomcat5.5.26作为...

    ssh整合配置文件以及jar包下載!!

    4. 在Spring的`struts-spring.xml`中,配置Struts2与Spring的整合,如Action类的托管。 5. 编写实体类、DAO接口、Service接口及其实现类。 6. 测试并调试,确保各部分功能正常。 这个压缩包提供的文件应该是上述...

    Eclipse搭建SSH架构

    - 在Struts的配置文件中,使用Spring插件的`&lt;result&gt;`标签指向Spring托管的bean,以便调用Spring MVC的Controller。 - 配置Hibernate的SessionFactory,并在Spring中声明,让Spring管理SessionFactory实例。 - ...

    struts2.5.0+spring4.1.6+hibernate4.2jar包

    最后,Struts2的Action可以直接调用Spring托管的服务,这些服务又可以通过Hibernate来操作数据库。 在实际项目中,SSH整合通常涉及以下步骤: 1. 配置Struts2的struts.xml,定义Action和结果页面。 2. 配置Spring的...

    JavaEE Struts2整合Spring的小案例

    Struts2会自动将Spring托管的bean注入到Action类中。 ```java public class HelloWorldAction { private MessageService messageService; public void setMessageService(MessageService messageService) { ...

    Spring+Struts+Hibernate整合框架技术

    在SSH中,Spring作为业务逻辑的容器,管理着其他组件(如Struts的Action、Hibernate的SessionFactory)的生命周期,实现依赖注入,同时负责事务管理。 3. **Hibernate框架**: Hibernate是一个流行的ORM(Object-...

    struts2+hibernate3.2+spring2.5整合示例

    做了一个ssh2的整合示例,删除了示例中的jar包,资源太大传不上,该示例采用的目前主流的技术struts2.1+hibernate3.2+spring2.5 的整合开发,示例采用面向接口的设计开发模式,使用spring来管理hibernate的事务,...

    自己实现的简单weike系统(ssh+kindEditor)

    SSH框架是Java Web开发中常用的三大开源框架组合,它们各自负责不同的功能层面:Spring提供了依赖注入和面向切面编程,以简化应用的复杂性;Struts2作为MVC框架,负责控制层逻辑,处理用户请求;Hibernate则作为对象...

    基于MyEclipse6.5的SSH整合.doc

    - 创建对应的Action类,实现业务逻辑,注入由Spring管理的DAO。 - 编写Hibernate的DAO层,负责与数据库交互,使用SessionFactory获取Session。 - 创建JSP页面,展示和接收用户界面数据。 9. **测试与调试** - ...

    基于ssh开发的网上论坛项目

    【SSH网上论坛项目详解】 SSH(Struts2、Spring、Hibernate)是Java Web开发中的一种经典框架组合...通过这个项目,开发者不仅可以掌握SSH框架的使用,还能了解到如何在实际项目中进行需求分析、功能设计和性能优化。

Global site tag (gtag.js) - Google Analytics