springMVC的controller单例和多例下成员变量的问题

首先上测试代码

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

import com.sun.accessibility.internal.resources.accessibility;
@Controller
@Scope("prototype")
public class MyController {

    private int i = 0; //非静态
    private static int a=0;//静态
    @RequestMapping("/test1")
    public String toShow(ModelMap model) {
        System.out.println((++i)+"-----"+(++a));
        return "hello";
    }    
}

当浏览器第一次访问http://localhost:8080/boot-crm/test1.action

我们来看控制台和debug输出信息
注意debug显示的当前controller的id

这里写图片描述

再次访问
这里写图片描述
这里写图片描述
从debug提供的信息可以看出多例模式下的controller的id会变化,也就是说2次访问action,springMVC创建了不同的controller.

当在controller类上去掉@scope(“prototype”),变成默认的单例模式
这里写图片描述

访问action
这里写图片描述
这里写图片描述

再次访问
这里写图片描述
这里写图片描述
2次访问的是同一个controller,共享普通成员变量和静态成员变量.

总结:
单例模式下会共享普通成员变量和静态成员变量,多例模式下普通成员变量不共享,静态成员共享.
在开发中,springMVC优先使用单例模式,而且尽量不要在controller中设定成员变量.
如果要定义成员变量并为成员变量赋值可以配置source.properties,通过读取配置文件为成员变量初始化.
这里写图片描述

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值