2008-09-19 11 views
7

Il mio livello di modello viene utilizzato da una manciata di diversi progetti e mi piacerebbe utilizzare un singolo file XML Spring Configuration per il modello indipendentemente dal progetto che lo sta usando.La presenza di molti bean inutilizzati in un contesto Spring Bean spreca risorse significative?

La mia domanda è: Poiché non tutti i fagioli sono utilizzati in tutti i progetti, spreco risorse in quantità significative se non vengono istanziati? Non sono troppo sicuro di quanto Piggy Spring stia caricando perché non è mai stato un problema fino ad ora.

Qualche idea?

risposta

7

tratto dal Spring Reference Manual: comportamento

L'impostazione di default per le implementazioni ApplicationContext è quello di entusiasmo pre-instantiate tutti i fagioli Singleton all'avvio. Pre-istanziazione significa che ApplicationContext creerà e configurerà avidamente tutti i suoi bean singleton come parte del processo di inizializzazione. Generalmente questa è una buona cosa, perché significa che qualsiasi errore nella configurazione o nell'ambiente circostante sarà scoperto immediatamente (al contrario di possibilmente ore o addirittura giorni lungo la linea).

Tuttavia, ci sono momenti in cui questo comportamento non è quello che si desidera. Se non si desidera eseguire il pre-istanza di un bean singleton quando si utilizza un ApplicationContext, è possibile controllarlo in modo selettivo contrassegnando una definizione di bean come inizializzata pigro. Un bean con inizializzazione lazily indica al contenitore IoC se un'istanza bean deve essere creata all'avvio o quando viene richiesta per la prima volta.

Durante la configurazione dei bean tramite XML, questo caricamento lazy è controllato dall'attributo 'lazy-init' sull'elemento [bean]; per esempio:

<bean id="lazy" class="com.foo.ExpensiveToCreateBean" lazy-init="true"/> 

Ma, a meno che i fagioli stanno utilizzando le risorse come i blocchi di file o connessioni al database, io non preoccuparsi troppo semplice sovraccarico di memoria se è più facile per voi di avere questa configurazione per più (ma diversi) profili.

0

Per impostazione predefinita, i bean di primavera sono singleton e vengono creati un'istanza quando viene creato il contesto dell'applicazione (all'avvio). Quindi, supponendo che tu non abbia sovrascritto il comportamento predefinito, verrà creata una singola istanza di ogni bean.

-1

Dipende dagli oggetti.

Ma il codice non utilizzato è "cruft" e aumenterà il costo della manutenzione.

È meglio cancellare i riferimenti e le classi. È sempre possibile ripristinare dal controllo di versione se sono necessari in seguito.

+2

Poiché tutte le classi sono utilizzate, non solo in ogni progetto, l'eliminazione di qualsiasi elemento è fuori questione. –

5

In aggiunta agli altri commenti: è anche possibile specificare un intero file di configurazione da inizializzare pigramente, usando l'attributo 'default-lazy-init' sull'elemento <beans/>; per esempio:

<beans default-lazy-init="true"> 
    <!-- no beans will be pre-instantiated... --> 
</beans> 

Questo è molto più facile che aggiungere l'attributo lazy-init per ogni chicco, se avete un sacco di loro.

Problemi correlati