spring整合SpringMVC Controller 和 Struts2 Action控制层Bean的默认作用域

Spring在整合SpringMVC 时的Controller作用域默认是单例。

Spring在整合Strut2时Action是作用域原型。

我们知道Spring在配置bean时默认是单例。那么对于的service和dao层的bean也是使用的单例模型。

我们做个测试

package com.pyc.test.controller;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 创建时间:2015-2-1 下午9:40:03
 *
 * @author andy
 * @version 2.2
 *
 */

@Controller
@RequestMapping("/my")
public class TestController {

	private static Integer num_s = 0;
	private Integer num_n = 0;

	@RequestMapping("/count")
	public @ResponseBody
	Integer show() {
		System.out.println("num_s:" + (num_s++) + "   num_n:" + (num_n++));
		return 1;
	}

}

多次请求之后:

可以看出变量num_n使用的同一个成员变量,所以说明默认是单例。

当我们添加如下代码时,添加@Scope改变为原型模式:

@Controller
@Scope("prototype")
@RequestMapping("/my")

可以看到非静态成员变量始终是新的。

SpringMVC的Controller数据都是从方法参数传入的,是方法级的,使用单例模式,所以在没有共享成员变量情况下是线程安全的,应该避免共享的成员变量防止出现线程安全问题,

而Spring管理的Struts2的Action是原型模式,Action是类级别的,参数可以是成员变量,不存在线程安全问题。

时间: 2024-08-27 02:40:12

spring整合SpringMVC Controller 和 Struts2 Action控制层Bean的默认作用域的相关文章

spring整合springMVC、mybatis、shiro

jar包: 1 <properties> 2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 3 <maven.compiler.source>1.7</maven.compiler.source> 4 <maven.compiler.target>1.7</maven.compiler.target> 5 <!--spring版本

struts2与spring整合问题,访问struts2链接时,spring会负责创建Action

每次访问一次链接,spring会创建一个对象,并将链接所带的参数注入到Action的变量中(如何做到的呐) 因为: struts2的action每次访问都重新创建一个对象,那spring的ioc是怎么实现注入的呢 ? 靠的是spring给创建的对象. 不知道你的action是在spring容器里还是自己创建的!要是在spring容器中那直接ref就好了. http://zhidao.baidu.com/link?url=tLlBYhZ9WIZLKo_0CzT1m3EIaXqIdAntESNjx3

【Struts2】Struts2与Spring整合后,如何指定Action为多例模式

Strust2默认是多例的,但是Spring默认是单例的,在进行Spring+Strust2整合的时候,就需要把Spring管理的action指定为多例模式,只需要在action上面加上@Scope("prototype") 例如: //... @Scope("prototype") public class UserAction { //... public String execute(){ //... }} //...  

spring整合springmvc

一.新建一个web项目 CTRL+N新建一个web项目 下一步 下一步.下一步 自动生成web.xml文件,我叫它入口文件 完成 -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ZK Spring 整合View/Controller层属性注入

问题场景 ZK实例化的View/Controller不同于Spring MVC实例化的Controller,不受Spring管理,无法进行注入. 解决方案 方法一 在doAfterCompose方法中调用SpringUtil提供的获取bean的方法,给bean赋值,代码如下: userService = (UserService) SpringUtil.getBean("userService"); 方法二 在doAfterCompose方法中调用Spring的自动注入方法进行所有be

spring整合springMVC、mybatis、hibernate、mongodb框架

开发环境 eclipse Mars 4.5 JDK 1.7 框架 spring 4.0.5 mybatis 3.2.7 hibernate 4.3.6 mongodb 1.7 数据库 MySQL 5.0 mongodb 3.2 这个一个maven管理的sping集成框架,这个项目的源代码,直接下载复用 在实际开发中,多少都会积累一些自己的代码库的,特别是在自己需要做一些测试的时候,所以将框架的基本集成弄好,能够直接复用是很有必要的.

Spring的四个基本注解annotation(控制层,业务层,持久层) @Component、@

SpringMVC中四个基本注解: @Component.@Repository   @Service.@Controller 看字面含义,很容易却别出其中三个: @Controller    控制层,就是我们的action层 @Service        业务逻辑层,就是我们的service或者manager层 @Repository  持久层,就是我们常说的DAO层 而@Component  (字面意思就是组件),它在你确定不了事哪一个层的时候使用. 其实,这四个注解的效果都是一样的,Sp

Spring整合ActiveMQ测试

第一部分:创建项目(使用maven) --注意:使用IDEA创建maven普通项目还是聚合项目,都可以不用勾选,直接点next. 然后填入坐标和模块的名字   然后点击左上角的+号,选择web.   在新打开的页面下会显示web选项,这里的路径改为\src\main\webapp ,再修改web.xml文件的路径.   IDEA不会pom.xml文件默认生成jar文件,要在pom.xml添加<packaging>war</packaging>构建时生成war文件. 第二步:导入po

spring 整合 spring mvc

需要进行 Spring 整合 SpringMVC 吗 ? 还是否需要再加入 Spring 的 IOC 容器 ? 是否需要再 web.xml 文件中配置启动 Spring IOC 容器的 ContextLoaderListener ? 1. 需要: 通常情况下, 类似于数据源, 事务, 整合其他框架都是放在 Spring 的配置文件中(而不是放在 SpringMVC 的配置文件中). 实际上放入 Spring 配置文件对应的 IOC 容器中的还有 Service 和 Dao. 2. 不需要: 都放