I controllori MVC di spring sono single?

Ho una domanda su Spring 3 MVC @Controllers . Quando arriva una richiesta, il contenitore crea una nuova istanza del controller per ogni richiesta (Simile a un’azione in Struts 2 – ThreadLocal ActionContext ) o una singola istanza risponde a tutte le richieste? Di default sono i singleton dei bean controller in un contesto?

Quali sono le linee guida / le migliori pratiche per un’applicazione MVC Spring 3? Queste impostazioni sono configurabili? Dovrebbero essere configurati? Cambia molto se il mio ambiente è un ambiente cluster – immagino che non dovrebbe essere il jvm / contenitori sarebbe diverso – ma qualche suggerimento autorevole sarebbe benvenuto.

Ho letto la documentazione di Spring ma probabilmente l’ho persa. Qualsiasi ‘questo è il modo in cui abbiamo implementato il tipo di’ risposte / puntatori / collegamenti sarebbe utile Grazie.

I controller Spring sono single (c’è solo un’istanza di ciascun controller per applicazione web) proprio come i servlet. In genere non ha senso cambiare questo comportamento (se è anche ansible). Vedere Informazioni sulla sicurezza del thread del servlet per i più comuni errori, anche per i controller.

Se la tua applicazione è in cluster fai tutto il ansible per evitare lo stato. Lo stato nei controller richiede la sincronizzazione per evitare problemi di threading. Probabilmente replicherete anche quello stato tra i server – molto costoso e problematico.

Le azioni Struts2 non sono singletons perché portano lo stato. Struts2 sfrutta le proprietà javabeans sull’azione stessa per trasportare i dati delle richieste in arrivo e esporli ai vari livelli del framework.

Spring, d’altra parte, usa un object modello che viene consegnato al controller. Il controller in sé non mantiene lo stato, quindi un singleton ha senso.

Il controllore è singletons quindi può evitare di creare molte istanze con parole chiave nuove se la webapp elabora un sacco di richieste allo stesso tempo. L’uso del controller singleton potrebbe anche alleviare il carico di JVM diminuendo i GC giovani.

Per impostazione predefinita, i bean Spring sono singleton. Spring suggerisce di utilizzare singleton per bean senza stato come controller e DAO e scope prototipo per bean con stato.