Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are Spring MVC Controllers Singletons?

I have a query regarding Spring 3 MVC @Controllers. When a request comes in, does the container create a new instance of the controller for each request (Similar to an Action in Struts 2 - ThreadLocal ActionContext) or a single instance responds to all requests? By default are the controller beans singletons in a context?

What are the guidelines/ best practices for a Spring 3 MVC application? Are these settings configurable? Should those be configured? Does it change much if my environment is a clustered environment - I guess it should not as the jvm/containers would be different- but some authoritative suggestion would be welcome.

I have read Spring documentation but probably I missed it. Any 'this is how we implemented kind of' answers/ pointers/ links would be helpful Thanks.

like image 878
Atul Avatar asked Jul 16 '12 16:07

Atul


People also ask

Are Spring rest controllers singletons?

In case of REST implementations in Spring, spring Controllers are singleton.

Are controllers Threadsafe?

What is Controller ? Controller is, thread-safe class, capable of handling multiple HTTP requests throughout the lifecycle of an application. CrudRepository provides sophisticated CRUD functionality for the entity class that is being managed.

Are Spring services singletons?

singleton is the default scope in spring, so just leave your bean definitions as they are, without explicitly specifying the scope attribute. You can read more about scopes in the spring docs.

Is Spring rest controller multithreaded?

It is multithreaded. Then you have some sort of configuration issue.


2 Answers

Spring controllers are singletons (there is just one instance of each controller per web application) just like servlets. Typically there is no point in changing this behaviour (if it's even possible). See Regarding thread safety of servlet for common pitfalls, also applying to controllers.

If your application is clustered do as much as you can to avoid state. State in controllers will require synchronization to avoid threading issues. Also you'll probably replicate that state across servers - very expensive and troublesome.

like image 158
Tomasz Nurkiewicz Avatar answered Oct 12 '22 23:10

Tomasz Nurkiewicz


By default, Spring beans are singletons. Spring suggests to use singletons for stateless beans like controllers and DAOs, and prototype scope for stateful beans.

like image 24
Rams Avatar answered Oct 13 '22 00:10

Rams