Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有@Controller注释的类是单个对象吗?_Java_Spring_Spring Mvc_Tomcat_Io - Fatal编程技术网

Java 带有@Controller注释的类是单个对象吗?

Java 带有@Controller注释的类是单个对象吗?,java,spring,spring-mvc,tomcat,io,Java,Spring,Spring Mvc,Tomcat,Io,我知道两个具有相同内容的请求使用不同的线程。我认为不同的线程将使用@Controller注释创建不同的实例。但是当我运行下面的代码时,我发现我的想法是错误的 测试代码: @Controller @RequestMapping("test") public class TestADEDSAController { private String string = ""; @RequestMapping("controllerTest") @ResponseBody()

我知道两个具有相同内容的请求使用不同的线程。我认为不同的线程将使用@Controller注释创建不同的实例。但是当我运行下面的代码时,我发现我的想法是错误的

测试代码:

@Controller
@RequestMapping("test")
public class TestADEDSAController {
    private String string = "";

    @RequestMapping("controllerTest")
    @ResponseBody()
    public String controllerTest(@RequestParam String string) {
        return this.string += string;
    }
}
第一次响应内容如下:

test
第二次是这样的:

testtest
JVM中似乎只有一个测试实例


我想知道JVM中是否总是只有一个@Controller实例?另外,我在哪里可以找到关于这个过程的详细介绍?

默认情况下,Spring中的所有bean都创建为
singleton
(每个IOC容器一个)

这是

(默认)将单个bean定义的范围限定为每个SpringIOC容器的单个对象实例


默认情况下,Spring创建bean的单个共享实例。默认情况下,bean范围是
singleton
。如果您需要在每个请求上创建一个新实例,您应该将bean范围定义为
prototype
。这可以通过使用
@Scope(“prototype”)
注释类来完成,也可以通过在spring配置xml中定义作用域来完成,如下所示:

 <bean id="controllerId" class="com.package.name.TestADEDSAController" scope="prototype"/>


请通读一遍,以便更好地理解spring中的bean作用域。

否,默认情况下,对象是单例对象。这意味着您的对象必须是线程安全的。 因此,在控制器中使用不安全的值,如字符串(常量除外),是一种不好的做法


如果两个线程同时运行,您的字段可能会被破坏。

默认作用域为“singleton”,因此,如果每次需要Spring创建新实例,除了@Controller注释外,您还可以使用@scope(“prototype”)注释。还有其他web感知范围,如请求、会话和全局会话。阅读示例。

@Controller
没有属性
范围
谢谢,您的回答非常详细。在我阅读了您给我的文档之后,我调试了spring框架源代码来研究这个过程,当我调试到类AbstractUrlHandlerMapping的方法lookupHandler()时,我发现字段handlerMap的大小是六,但我不知道它是如何初始化的,这让我非常困惑。