Qual è l'uso del metodo init di Spring e del metodo destroy?

3

Durante l'apprendimento del framework Spring, ho trovato che il framework Spring fornisce init-method e destroy-methods che possono essere utilizzati per inizializzare alcune proprietà o per fare cose di pulizia.

Possiamo fare tutte queste cose nel costruttore del bean, quindi perché Spring fornisce queste cose e nel mondo reale qual è l'uso effettivo di queste due cose?

    
posta Shekhar 22.05.2012 - 19:22
fonte

3 risposte

5

Quando usi l'iniezione di dipendenza basata sul setter, il init-method rende possibile l'inizializzazione: il metodo specificato verrà chiamato dopo che tutti i setter sono stati richiamati.

Come per destroy-method , sembra che implementare finalize nelle classi Java non sia una buona pratica, invece, e molte librerie definiscono un metodo close che può o non può essere chiamato da finalize . Vedi questa discussione: link

EDIT (per chiarire ulteriormente le cose)

Nei metodi di iniezione basati sul setter verranno chiamati nel seguente ordine:

  1. costruttore predefinito
  2. i setter corrispondenti a ogni <property> del bean
  3. init-method , se specificato

Nei metodi di iniezione basati sul costruttore verranno chiamati nel seguente ordine:

  1. il costruttore corrispondente
  2. init-method , se specificato
risposta data 22.05.2012 - 20:23
fonte
1

L'argomento è quello che accade continuamente nei circoli primavera / java. Ecco alcuni post del blog che illustrano la maggior parte dei punti importanti:

Argomenti principali per l'iniezione del costruttore:

  1. L'iniezione del costruttore assicura che tutte le proprietà obbligatorie siano state soddisfatte, ed è semplicemente non possibile creare un'istanza di un oggetto in uno stato non valido
  2. Impone l'ordine di inizializzazione e impedisce le dipendenze circolari
risposta data 10.07.2012 - 06:31
fonte
0

Per l'iniezione setter di bean configurati XML, il metodo init ti dà l'opportunità di controllare lo stato del tuo oggetto prima che vengano richiamati tutti i metodi. Ricorda che non esiste un controllo in fase di compilazione per cui viene passato un argomento per inizializzare ogni campo dell'oggetto. Quindi, anche se un setter può essere definito nella classe java, la definizione del bean nell'XML potrebbe mancare di un tag di proprietà.

    
risposta data 31.08.2012 - 10:38
fonte

Leggi altre domande sui tag