2013-10-11 9 views
10

Nella nostra applicazione si verificano problemi di prestazioni con Component Scan. È piuttosto lento e le sue prestazioni non dipendono dal numero di classi nel pacchetto scansionato.Le prestazioni della scansione componenti Spring dipendono dalle dimensioni del pacchetto scansionato?

Ogni riga come questa nel nostro file di configurazione sping:

<context:component-scan base-package="foo.bar" /> 

aggiunge 2 minuti per il tempo di avvio della nostra applicazione. Il numero di classi nel pacchetto scansionato non ha importanza - stiamo sperimentando lo stesso ritardo sia per i pacchetti con classi 10 che 1k.

Perché le prestazioni della scansione dei componenti non dipendono dalle dimensioni del pacchetto scansionato?

Stiamo utilizzando un approccio misto per la creazione di bean di primavera: utilizziamo sia le definizioni xml che la scansione dei componenti. Può essere questa la ragione di un tale comportamento?

+0

Mi ricordo di aver avuto questo tipo di problemi durante l'utilizzo di AOP, e la soluzione era di impostare il pacchetto completo che possiamo – RamonBoza

+1

Questo può aiutare http://stackoverflow.com/questions/5947713/spring-startup-performance-issues –

+0

@RamonBoza Stiamo già utilizzando pacchetti profondi il più possibile. Come ho scritto, stiamo vivendo lo stesso rallentamento per i pacchetti grandi e piccoli. –

risposta

2

Ciò che Spring fa è passare attraverso tutte le classi nei pacchetti che si danno nella scansione componenti e se la classe ha Componente, Deposito o Servizio registra un bean nel contesto. Quindi il numero di classi conta. È necessario eseguire la scansione solo dei pacchetti che contengono classi annotate (anche la scansione di classi non annotate richiederà tempo). Inoltre, è possibile utilizzare solo un tag di scansione del componente e elencare tutti i pacchetti. L'uso sia della scansione xml che di quella dei componenti non dovrebbe costituire un problema, a condizione che non vengano duplicati.

+0

Sei sicuro che Spring esegua la scansione solo delle classi nel pacchetto specificato? Un'implementazione, che mi viene in mente, è la scansione di TUTTE le classi nel contesto, selezionando poi solo quelle che provengono dal pacchetto specificato, quindi selezionando solo quelle con le annotazioni appropriate. –

+0

Si può provare ... Rimuovere alcuni pacchetti nella scansione dei componenti che contiene il pacchetto con classi annotate e verificare se sono disponibili nel contesto. Fai riferimento anche a http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s12.html (capitolo 4.12.2 Componenti di rilevamento automatico) "Per rilevare automaticamente queste classi e registrare i bean corrispondenti richiede l'inclusione del seguente elemento in XML dove 'basePackage' sarebbe un pacchetto genitore comune per le due classi (o in alternativa potrebbe essere specificato un elenco separato da virgole che includeva il pacchetto genitore di ogni classe). " –

Problemi correlati