2012-12-08 17 views
13

La mia applicazione Web utilizza il priming IOC. Quindi tutti i miei spring bean saranno singleton (di default). Nel caso in cui due richieste provino ad accedere a due metodi diversi di una singola classe. Ad esempio: MySpringBean è una classe che ha due metodi metodi searchRecord e insertRecord.Se nello stesso istante entrambi i metodi vengono tentati di accedere attraverso lo stesso bean.Come interagire con Spring bean Handle

Come può essere lo stesso bean di primavera disponibile per entrambi i client nello stesso momento o si verificherà un problema di concorrenza quando entrambe le richieste tenteranno di accedere a due metodi diversi ma attraverso lo stesso bean di primavera. e dal momento che il bean di primavera è singleton, non si può formare una nuova istanza. In questo caso, come funzionerà?

risposta

4

Se il fagiolo è un Singleton, allora Primavera vi darà la stessa istanza in qualsiasi thread. Spetta a te rendere sicuro quel filo di fagioli. Dal momento che è un singleton, faresti meglio a rendere questa classe apolide.

4

Come altri hanno già suggerito, Spring fornirà la stessa istanza a tutti i thread in caso di bean "singleton".

Quello che devi capire è che i thread fanno tutto il lavoro in un sistema eseguendo il codice mentre gli oggetti forniscono stato e comportamento (codice). È quindi possibile che più thread (richieste nel tuo caso), eseguano contemporaneamente gli stessi metodi in un bean singleton. È possibile rendere tali fagioli privi di stato come suggerito da Tomasz o renderli altrimenti "thread-safe".