Logo it.removalsclassifieds.com

Differenza tra l'iniezione del costruttore e l'iniezione del setter (con tabella)

Sommario:

Anonim

Quando la risoluzione delle dipendenze viene eseguita da un agente esterno anziché dalla classe stessa, si parla di iniezione di dipendenza. Esistono due modi standard di inserimento delle dipendenze supportati nel framework Spring, tramite un argomento del costruttore o tramite l'utilizzo del metodo setter. Il primo tipo di iniezione di dipendenza è noto come iniezione del costruttore e il secondo è noto come iniezione setter. Entrambi i metodi sono utilizzati per scopi diversi e hanno i loro pro e contro.

Iniezione del costruttore vs Iniezione del setter

La differenza tra l'iniezione del costruttore e l'iniezione del setter è che l'iniezione del costruttore usa il costruttore e, d'altra parte, l'iniezione del setter utilizza i metodi setter per iniettare la dipendenza. Questi due tipi di modalità di iniezione differiscono l'uno dall'altro sulla base di diversi parametri come sicurezza, leggibilità, immutabilità del supporto e così via.

L'iniezione del costruttore è un tipo di iniezione delle dipendenze nel framework Spring che usa un costruttore per inserire la dipendenza. Le dipendenze richieste per una qualsiasi delle classi sono specificate come parametri del costruttore di quella classe specifica. L'iniezione del costruttore non consente allo sviluppatore di costruire alcun oggetto a meno che tutte le dipendenze non siano pronte e, quindi, garantisce l'inserimento corretto delle dipendenze.

L'iniezione di setter è un tipo di iniezione di dipendenza nel framework di primavera che utilizza i metodi di setter per iniettare la dipendenza. Ha metodi setter della forma setXXX() dove XXX denota una dipendenza che inietta gli oggetti dipendenti nel client. Questo modo di risolvere la dipendenza è molto comune nel framework Spring.

Tabella di confronto tra l'iniezione del costruttore e l'iniezione del setter

Parametri di confronto

Iniezione del costruttore

Iniezione Setter

Dipendenza iniettata Usa un costruttore. Utilizza metodi setter.
leggibilità Non è molto leggibile rispetto al setter. È più leggibile.
Sostituisci proprietà Impossibile sovrascrivere la dipendenza. Può sovrascrivere determinate dipendenze.
I cambiamenti Crea sempre una nuova istanza di bean. Non crea alcuna nuova istanza di bean.
Immutabilità Supporta l'immutabilità. Non supporta.

Cos'è l'iniezione del costruttore?

L'iniezione del costruttore è uno dei modi standard per risolvere le dipendenze all'interno del framework Spring, che definisce staticamente l'elenco delle dipendenze richieste per le classi assegnandole come parametri al costruttore della classe. Tutte le classi che richiedono dipendenza devono avere un costruttore pubblico al loro interno, che accetta un'istanza come argomento del costruttore, e quel costruttore dovrebbe essere necessariamente l'unico costruttore pubblico all'interno di quella classe.

Se è necessaria più di una dipendenza, gli argomenti aggiuntivi dovrebbero essere aggiunti allo stesso costruttore. Per garantire che la dipendenza sia iniettata completamente, dovrebbe essere seguito un unico principio di responsabilità, che afferma che i membri dovrebbero fare solo una cosa. Il costruttore dovrebbe essere mantenuto libero da qualsiasi altra logica per rendere il costruttore delle classi più veloce e affidabile.

Un fatto importante dell'iniezione del costruttore è che gli oggetti non verranno costruiti a meno che tutte le dipendenze non siano pronte. Poiché crea nuove istanze ogni volta che il costruttore viene chiamato in questo modo, non è possibile eseguire l'override. L'iniezione del costruttore viene fondamentalmente utilizzata nei casi in cui è necessario creare oggetti con tutte le dipendenze. Questo è il modo più generalmente applicabile e più semplice per implementare correttamente le dipendenze.

Che cos'è l'iniezione di setter?

L'iniezione setter è uno dei modi standard per risolvere la dipendenza all'interno del framework Spring, che utilizza i metodi setter per risolvere le dipendenze. I metodi setter sono nella forma setXXX(), dove XXX specifica la dipendenza che deve essere iniettata. In questo tipo di metodo di iniezione, prima viene creato l'oggetto e, successivamente, viene iniettata la dipendenza. Per configurare Spring, vengono utilizzati file XML e, quindi, la leggibilità è una grande preoccupazione.

Poiché i metodi setter hanno una forma specifica di nomi di metodo, migliora la leggibilità in molti modi. Quando è necessario iniettare un numero maggiore di dipendenze, il tipo di iniezione setter è molto preferito e preferito rispetto ad altri tipi di metodi di iniezione. Inoltre, utilizzando setter injection, gli sviluppatori possono facilmente sovrascrivere e modificare i valori perché non crea ogni volta una nuova istanza di bean. L'unico inconveniente dell'iniezione setter è che non garantisce l'iniezione completa delle dipendenze.

Non c'è alcuna garanzia sul fatto che un determinato oggetto abbia una dipendenza iniettata o meno. In altre parole, significa che potrebbe esserci un oggetto con dipendenza incompleta. L'iniezione di setter è il modo più flessibile e più comune per implementare l'iniezione di dipendenza.

Principali differenze tra l'iniezione del costruttore e l'iniezione del setter

Conclusione

La linea di fondo è che entrambi i modi di iniettare le dipendenze lasciano che sia l'iniezione del costruttore o l'iniezione del setter, hanno i loro pro e contro. In aggiunta a ciò, Spring non si astiene dagli sviluppatori dall'usare nessuno tranne il rater. Sono liberi di utilizzare sia l'iniezione del costruttore che l'iniezione del setter in un file di configurazione di Spring. La cosa importante da tenere a mente durante l'iniezione delle dipendenze è usare l'iniezione del costruttore quando c'è la necessità obbligatoria di creare oggetti con tutte le dipendenze e usare l'iniezione setter quando il numero di dipendenze è maggiore o se c'è bisogno di una migliore leggibilità.

Riferimenti

  1. https://digitalcommons.calpoly.edu/csse_fac/34/
  2. https://books.google.com/books?hl=en&lr=&id=InfRDwAAQBAJ&oi=fnd&pg=PA63&dq=costruttore+iniezione&ots=Hon_bCw-Kv&sig=VdsD_S0lCfP3D8idI8q4F6RnhoE

Differenza tra l'iniezione del costruttore e l'iniezione del setter (con tabella)