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 ...
随机推荐
- MySQL用命令行复制表的方法
mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 ; 或 CREATE TABLE 新表 LIKE 旧表 ; 注意上面两种方式,前一种方式是不会复制时的主键类型和自增方式是 ...
- mysql 添加定时任务
之前定时任务都是用quartz 或者spring的任务调度来做的,易于管理,但是要写代码加 配置,其实mysql 自带了job ,先创建一个存储过程
- today's learning of english 1
1.curriculum 必修课 主修课 2.sought seek的过去式 3.blessed with a wonderful marriage 有个幸福美满的婚姻 4.al ...
- HDU--杭电--1253--胜利大逃亡--广搜
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- RHEL6.4编译安装gcc4.8.1
因为平时用的linux虚拟机都是RHEL6.4, 自带的gcc版本号太低,不支持C++11,而从gcc4.8.1開始, gcc完美支持C++11全部特性. 故升级了一下. 以下是具体步骤: 1. 下载 ...
- asp.net mvc vs web form
译者介绍 小小.NET学童,滴答…滴答…的雨…… 正文如下======================================================= 原文示例(VS2012): 1 ...
- [Javascrip] Logging Timing Data to the Console
Learn to use console.time with console.timeEnd to get accurate timings of operations in javascript. ...
- 数据挖掘方面重要会议的最佳paper集合
数据挖掘方面重要会议的最佳paper集合,兴许将陆续分析一下内容: 主要有KDD.SIGMOD.VLDB.ICML.SIGIR KDD (Data Mining) 2013 Simple and De ...
- LINUX 内核与 systemtap +GO 专家博客 一个[ 系统软件工程师] 的随手涂鸦
http://nanxiao.me/category/%E3%80%8Anix-hacking%E3%80%8B%E6%9D%82%E5%BF%97/ 月刊 https://github.co ...
- sdaf