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.
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.