springMVC中的Controller里面定义全局变量

使用SpringMVC的时候,如果想要在Controller中定义一个全局变量,并且实现在不同用户访问程序的时候,所得到的全局变量不一样的(线程安全的),这个时候就可以用Spring的注解@Scope来实现:\

@Controller 
//把这个bean 的范围设置成session,表示这bean是会话级别的, 
@Scope("session") 
public class XxxController{ 
private List<String> list ;

//PostConstruct当bean加载完之后,就会执行init方法,并且将list实例化; 
@PostConstruct 
public void init(){ 
  list = new ArrayList<String>(); 
}

}

当我们首次访问这个Controller的时候,他会根据判断这个会话是不是处于同一个session中,如果是一个新的,容器会执行init方法,如果一样就不会。

下面简单说下@Scope这个注解的理解

spring中bean的scope属性,有如下5种类型:

singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例
prototype表示每次获得bean都会生成一个新的对象
request表示在一次http请求内有效(只适用于web应用)
session表示在一个用户会话内有效(只适用于web应用)
globalSession表示在全局会话内有效(只适用于web应用)
在多数情况,我们只会使用singleton和prototype两种scope,如果在spring配置文件内未指定scope属性,默认为singleton。

单例的原因有二:
1、为了性能。

2、不需要多例。

--》单例不用每次都new,当然快了。

--》不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。

我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。

package com.lavasoft.demo.web.controller.lsh.ch5;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* Created by Administrator on 14-4-9.
*
* @author leizhimin 14-4-9 上午10:55
*/
@Controller
@RequestMapping("/demo/lsh/ch5")
@Scope("prototype")
public class MultViewController {
private static int st = 0; //静态的
private int index = 0; //非静态

@RequestMapping("/test")
public String test() {
System.out.println(st++ + " | " + index++);
return "/lsh/ch5/test";
}
}

单例的:

0 | 0

1 | 1

2 | 2

3 | 3

4 | 4

改为多例的:

0 | 0

1 | 0

2 | 0

3 | 0

4 | 0

最佳实践:定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。

原文地址:https://www.cnblogs.com/jiazhutao/p/12675577.html

时间: 2024-10-01 20:09:55

springMVC中的Controller里面定义全局变量的相关文章

SpringMVC中的controller默认是单例的原因

http://lavasoft.blog.51cto.com/62575/1394669/ 1.性能 :单例不用每次new浪费资源时间. 2.不需要:一般controller中不会定义属性这样单例就不会被影响到.

SpringMVC中对Controller使用AOP

转自http://usherlight.iteye.com/blog/1306111 正确配置spring aop,在controller中使用AOP 在controller中使用AOP的问题主要在于如何让controller能够被检测到. controller和其他spring bean的区别在于:controller是由mvc定义并在web.xml中的dispatcher中定义的. 解决方法: 1.正确定义controller,(比较通用的做法,没有特殊情况的话,大部分应用没有这个问题)  

SpringMVC中的@Controller和@RequestMapping到底什么鬼?

1.1 @Controller是什么首先看个例子: @Controller @RequestMapping("/blog") public class BlogController { @RequestMapping("/index") public ModelAndView index(HttpServletRequest request){ ModelAndView mav = new ModelAndView("/index"); Stri

springmvc中拦截器的定义和配置

package com.hope.interceptor; import org.springframework.lang.Nullable;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;import javax.servlet.ht

springmvc 中controller与jsp传值

在springmvc中的controller所对应的函数中,如果需要从*.jsp页面中获取数据,可以自行在函数括号中写,springmvc会自动封装传过来的. spring-mvc.xml 中加入 1   <!-- 自动扫描 --> 2 <context:component-scan base-package="cn.itcast.springmvc.service,cn.itcast.springmvc.web.controller"/> 3  <!--

SpringMVC学习(十二)——SpringMVC中的拦截器

SpringMVC学习(十二)--SpringMVC中的拦截器 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.本文主要总结一下SpringMVC中拦截器是如何定义的,以及测试拦截器的执行情况和使用方法. SpringMVC中拦截器的定义和配置 SpringMVC中拦截器的定义 在SpringMVC中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法,如下: public class Inter

springmvc中的单例问题

1,springmvc实际上是基于一个叫做DispatcherServlet的servlet的.servlet按照以往的学习经验,他是单事例多线程的. Servlet生命周期 1.装载Servlet.这项操作一般是动态执行的.然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet.2.Server创建一个Servlet的实例3.Server调用Servlet的init()方法4.一个客户端的请求到达Server5.Server创建一个请求对象6.

详解SpringMVC中Controller的方法中参数的工作原理

前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html SpringMVC中Controller的方法参数可以是Integer,Double,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非常灵活.本文将分析SpringMVC是如何对这些参数进行处理的,

详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] good

目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口的具体应用 常用HandlerMethodArgumentResolver介绍 常用HandlerMethodReturnValueHandler介绍 本文开头现象解释以及解决方案 编写自定义的HandlerMet