0

In spring 3.0 controllers can be created simply by annotating the class as @Controller and is singleton by default.

So to cater many requests container will have only one object of that type.

On the other-hand if it is prototype,then many objects will be created and hence resource utilization will be poor.

Please correct me if I am wrong. My question is can I pool the controllers and if I can, then will it improve the concurrency and throughput?

4

1 回答 1

4

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

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

如果您的控制器是有状态的,那么仍然不需要实例池。相反,您可能应该在SessionRequest范围的 bean 中管理状态,并依靠 Spring 在每个请求上将它们注入到 Controller 中,以确保多个执行线程不会相互干扰。

鉴于您目前的理解水平,您应该对不同的范围相当满意。我还建议阅读和理解 Spring 如何使用代理将作用域 bean 注入控制器。

于 2013-08-29T11:01:55.140 回答