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.
In case of REST implementations in Spring, spring Controllers are singleton.
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.
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.
It is multithreaded. Then you have some sort of configuration issue.
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.
By default, Spring beans are singletons. Spring suggests to use singletons for stateless beans like controllers and DAOs, and prototype scope for stateful beans.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With