Spring MVC : Making multi user friendly

标签 spring spring-mvc

我通过网络询问了这个问题,但无法清楚地了解这个问题。

    String someVariable;
@RequestMapping(value = "/home",method = RequestMethod.GET)
public String home(Model model)
{
        MyClass ob = new MyClass();

        // using 'someVariable'

        int r = ob.method1();
        //.........
        //........
       return "something"
}

我的类(class)

public class MyClass{
       int i=0;
       public int method1(){
         // some operations on i
         return i;
       }
}

这个 Spring MVC 在多用户环境中可以正常工作吗? MyClass 在多用户环境中线程安全吗?

我只是想让我的 Spring MVC 应用程序能够正常工作以进行多用户访问。我可以简单了解一下吗?

最佳答案

MyClass 不是线程安全的。但它在 Controller 中的使用方式是线程安全的。当您在 home 方法中创建了 MyClass 的实例时:

public String home(Model model)
{
        MyClass ob = new MyClass();

        // using 'someVariable'

        int r = ob.method1();
        //.........
        //........
       return "something"
}

每个执行线程都会获得一个单独的MyClass实例。因此,一个应用程序线程对其自己的 MyClass 实例所做的更改不会影响其他应用程序线程可用的其他实例。

但是,如果您使用 Spring Controller 的默认范围,则使用 someVariable 将不是线程安全的。默认范围是单例范围。这样,您的 Controller 将只有一个实例可用,并且相同的 someVariable 将可用于所有应用程序线程。因此,不建议在 Controller 中使用可变实例变量。即使 String 是不可变的,如果一个用户为其设置了新值,则其他用户也可以使用相同的值,因为只有一个 someVariable 可用。

关于 Spring MVC : Making multi user friendly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20190630/

相关文章:

java - Spring Hibernate 保存/提交事务而不调用 Save 方法

java - 在没有aspectj的情况下,使用cglib或jdk代理的spring aop哪个是高性能的?

spring-mvc - 构造函数抛出异常;嵌套异常是 java.lang.NoSuchMethodError : org. springframework.util.AntPathMatcher.setCaseSensitive(Z)V

java - 服务方法参数、对象标识符与对象引用

java - Spring在路径中找不到配置

java - Spring MVC 中的选择框看起来是空的

spring-mvc - 权限外部jar创建文件tomcat

java - 未找到适合响应类型和内容类型 [application/json;charset=UTF-8] 的异常的 HttpMessageConverter

Spring MVC + Spring Security 使用一个休息的 web 服务登录

java - 从数据库 SQL oracle 保存和获取 blob 时出错