Java 我可以在SpringMVC应用程序中共享控制器吗?如果可以,它将如何影响性能?

Java 我可以在SpringMVC应用程序中共享控制器吗?如果可以,它将如何影响性能?,java,spring-mvc,Java,Spring Mvc,在Spring3.0中,只需将类注释为@Controller即可创建控制器,默认情况下,该类是单例的 因此,为了满足许多请求,容器将只有一个该类型的对象 另一方面,如果它是原型,那么将创建许多对象,因此资源利用率将很低 如果我错了,请纠正我。我的问题是,我可以将控制器集中在一起吗?如果可以,那么它会提高并发性和吞吐量吗?默认情况下,所有控制器都是单例的,这是正确的 除非控制器是有状态的,否则不需要有实例池。您的web容器将使用一个托管线程池来处理请求,每个线程都可以同时访问控制器(因为没有共享状

在Spring3.0中,只需将类注释为@Controller即可创建控制器,默认情况下,该类是单例的

因此,为了满足许多请求,容器将只有一个该类型的对象

另一方面,如果它是原型,那么将创建许多对象,因此资源利用率将很低


如果我错了,请纠正我。我的问题是,我可以将控制器集中在一起吗?如果可以,那么它会提高并发性和吞吐量吗?

默认情况下,所有控制器都是单例的,这是正确的

除非控制器是有状态的,否则不需要有实例池。您的web容器将使用一个托管线程池来处理请求,每个线程都可以同时访问控制器(因为没有共享状态)。我建议,调整web容器将为并发性和吞吐量提供更好的结果

如果控制器是有状态的,那么仍然不需要实例池。相反,您可能应该管理bean或作用域bean中的状态,并在每个请求时依靠Spring将这些状态注入控制器,以确保多个执行线程不会相互干扰


考虑到您目前的理解水平,您应该对不同的范围相当熟悉。我还建议阅读和理解Spring如何利用将作用域bean注入控制器

默认情况下,所有控制器都是单例的,这是正确的

除非控制器是有状态的,否则不需要有实例池。您的web容器将使用一个托管线程池来处理请求,每个线程都可以同时访问控制器(因为没有共享状态)。我建议,调整web容器将为并发性和吞吐量提供更好的结果

如果控制器是有状态的,那么仍然不需要实例池。相反,您可能应该管理bean或作用域bean中的状态,并在每个请求时依靠Spring将这些状态注入控制器,以确保多个执行线程不会相互干扰


考虑到您目前的理解水平,您应该对不同的范围相当熟悉。我还建议阅读和理解Spring如何利用将作用域bean注入控制器

为什么不直接使用单例作用域呢?那是一个游泳池1@samlewis这是我需要答案的一件事。我需要每秒满足尽可能多的请求。我的问题是,如果我使用一个多线程池,那么它会提高吞吐量吗?如果它确实提高了吞吐量,那么spring是否支持它?spring MVC不会阻止多个线程同时通过单线程作用域控制器运行。为什么不只使用单线程作用域?那是一个游泳池1@samlewis这是我需要答案的一件事。我需要每秒满足尽可能多的请求。我的问题是,如果我使用一个多线程池,那么它会提高吞吐量吗?如果它确实提高了吞吐量,那么spring是否支持它?spring MVC不会阻止多个线程同时通过单线程作用域控制器运行。