struts2整合spring的思路
struts2整合spring有有两种策略:
》sping容器负责管理控制器Action,并利用依赖注入为控制器注入业务逻辑组件。
》利用spring的自动装配,Action将自动会从Spring容器中获取所需的业务逻辑组件。
让Spring管理控制器:
我们知道struts2的核心控制器首先拦截到用户请求,然后将请求转发给对应的Action处理,在此过程中,Struts2将负责创建Action实例,并调用相应的方法,这个过程是固定的(除非改写struts2的核心控制器)。现在的情形是:我们已经把Action实例交由Spring容器来管理,而不是由struts2产生的。那么,核心控制器如何知道调用Spring容器中的Action,而不是自行创建Action实例呢?这个工作是由struts2提供的spring插件完成的。
当我们在struts.xml文件中配置Action时,通常需要指定class属性,该属性就是用于创建Action实例的实现类。但Spring插件允许我们指定class属性时,不再指定Action的实例实际实现类,而是指定为Spring容器中的Bean ID,这样struts2不再自己负责创建Action实例,而是直接通过Spring容器去获取Action对象。

》使用自动装配:
在这种策略下,Action还是由Spring插件创建,Spring插件创建Action实例时,利用Spring的自动装配策略,将对应业务逻辑组件注入Action实例。
如果我们不指定自动装配,则系统默认使用按name自动装配。所谓自动装配,即让Spring自动管理Bean与Bean之间的依赖关系,无须使用ref显式指定依赖Bean。Spring容器会自动检查XML配置文件内容,为主Bean注入依赖Bean。自动装配可减少配置文件的工作量,但会降低依赖关系的透明性和清晰性。
通过设置struts.objectFactory.spring.autoWrite常量可以改变Spring插件的自动装配策略,该常量可接受如下几个值:
》name:根据属性名自动装配。Spring插件会查找容器中全部Bean,找出其中id属性与action所需业务逻辑组件同名的bean。将该bean实例注入到action实例。
》type:根据类型自动装配。Spring插件会查找容器中全部Bean,找出其中类型恰好与action所需业务逻辑组件相同的bean。将该bean实例注入到action实例。如果有多个这样的Bean,就会抛出一个致命异常;如果没有匹配的bean,则什么都不发生。
》auto:spring插件自动检测需要那种自动装配方式。
》constructor:与type类似,区别是constructor使用构造器来构造注入的所需参数,而不是使用设值注入方式。
使用spring插件自动注入的方式struts.xml和Action类不需要做什么修改。

使用第二种方式好像与不整合没什么区别,肯定存在区别,只是这个区别不是在配置文件中体现,而是在创建该Action实例时体现出来。如果不整合spring框架,则struts2框架负责创建Action实例,创建成功后接结束了;如果整合spring框架,则当Action实例创建完成之后,Spring插件还会负责将该Action所需的业务逻辑组件注入给该Action
struts2整合spring的思路的更多相关文章
- Struts2—整合Spring
Struts2—整合Spring Spring框架是一个非常优秀的轻量级java EE容器,大部分javaEE应用,都会考虑使用Spring容器来管理应用中的组件. Struts2是一个MVC框架,是 ...
- struts2整合spring出现的Unable to instantiate Action异常
在struts2整合spring的时候,完全一步步按照官方文档上去做的,最后发现出现 Unable to instantiate Action,网上一搜发现很多人和我一样的问题,配置什么都没有错误,就 ...
- struts2整合spring应用实例
我们知道struts1与spring整合是靠org.springframework.web.struts.DelegatingActionProxy来实现的,以下通过具体一个用户登录实现来说明stru ...
- Struts2 整合Spring(Maven,注解版)
这两天正在试验Struts2与Spring框架的整合,和他们各自的“注解”.今天就总结一下这两个框架怎么用注解进行整合. 一,加入两者的依赖包,除了两者的必要依赖外,还需要导入struts2-spri ...
- Struts2整合Spring方法及原理
一. Struts 2框架整合Spring步骤 1. 复制文件.复制struts2-spring-plugin-x-x-x.jar和spring.jar到WEB-INF/lib目录下.其中的x对应 ...
- Struts2+Hibernate+Spring(SSH)三大框架整合jar包
Struts2 + Spring3 + Hibernate3 框架整合 1. 每个框架使用 (开发环境搭建 )* 表现层框架 struts2 1) jar包导入: apps/struts2_blank ...
- (转)MyBatis框架的学习(六)——MyBatis整合Spring
http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...
- struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决
最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myec ...
- SSH整合(Struts2+hibernate+spring)
1.创建表 create table t_user( id int primary key auto_increment, username varchar(50), password varchar ...
随机推荐
- python 解析xml 文件: Element Tree 方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
- 使用python进行接口测试
最近在做接口测试,之前公司的方案是使用postman进行接口测试.但是伟大的墙导致我们只能用离线版postman..然后一个很长很长的接口列表,一个接一个的访问.我的天哪..所以萌生了一个想法,使用p ...
- 【转载】运维小技巧:使用ss命令代替 netstat
转自:https://www.91ri.org/12470.html ss是Socket Statistics的缩写. 顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类 ...
- iphone匹配邮箱的正则表达式
NSString *str = [NSString stringWithString:@"\\b([a-zA-Z0-9%_.+\\-]+)@([a-zA-Z0-9.\\-]+?\\.[a-z ...
- java中的String.format使用
format(String format, Objece... argues)函数相当于C语言中的printf函数,但是相对来说更灵活. 和C中的printf函数差不多,在fo ...
- linux网络编程学习笔记之五 -----并发机制与线程�
进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省 ...
- [转] Git 分支 - 分支的新建与合并
http://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E ...
- Java基础知识强化之集合框架笔记12:Collection集合存储字符串并遍历
1. Collection集合存储字符串并遍历 分析: (1)创建集合对象 (2)创建字符串对象 (3)把字符串对象添加到集合中 (4)遍历集合 2. 代码示例: package cn.itcast ...
- POJ 1330 Nearest Common Ancestors(LCA模板)
给定一棵树求任意两个节点的公共祖先 tarjan离线求LCA思想是,先把所有的查询保存起来,然后dfs一遍树的时候在判断.如果当前节点是要求的两个节点当中的一个,那么再判断另外一个是否已经访问过,如果 ...
- Python之路,Day22 - 网站用户访问质量分析监测分析项目开发
Python之路,Day22 - 网站用户访问质量分析监测分析项目开发 做此项目前请先阅读 http://3060674.blog.51cto.com/3050674/1439129 项目实战之 ...