Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 25865|Risposta: 0

[Fonte] Spring Boot legge (application.yml) il valore del file di configurazione

[Copiato link]
Pubblicato su 07/01/2019 15:37:14 | | | |
Il primo application.yml profilo di configurazione è il seguente:



Progetti Maven pom.xml aggiungere pacchetti:




Crea un nuovo oggetto mappato con il seguente codice:

Il tipo di stringa deve richiedere un setter per ricevere i valori delle proprietà; mappe, collezioni e array non sono obbligatori

Usa @Autowired annotazioni per iniettare automaticamente, come mostrato nell'immagine seguente:



esConfig produce sempre nulla, ho cercato una soluzione a lungo ma non ha funzionato, ci sarà una soluzione qui sotto.

Creiamo un nuovo controller, il codice è il seguente:

L'iniezione ha successo e i valori del file di configurazione yml vengono ottenuti normalmente, come segue:



Le ragioni per cui EsClient non può essere iniettato con successo sono le seguenti:

Chiama una funzione di questa classe nel costruttore, e la variabile del @Autowired di questa classe viene usata in questa funzione.

Quindi ho pensato che potesse andare storto. Perché @Autowired deve aspettare che la classe venga costruita prima di poter essere impostata da riferimenti esterni. Pertanto, il tempo di iniezione di @Autowired deve essere successivo al tempo di esecuzione del costruttore.
Soluzione:

Spring Team consiglia "Usa sempre l'iniezione di dipendenza basata su costruttori nei tuoi chicchi. Usa sempre le asserzioni per le dipendenze obbligatorie".

Traduzione:

Spring suggerisce "Stabilisci sempre l'iniezione di dipendenza con i costruttori nel tuo chicco. usare sempre asserzioni per forzare dipendenze".


Scrittura originale:

Scrittura modificata:



PS: L'ordine di inizializzazione delle variabili Java è: variabili statiche o blocchi di istruzioni statiche – > variabili di istanza o blocchi di istruzioni di inizializzazione – >metodo di costruzione – >@Autowired

Allora perché aggiungere il tipo finale alla variabile membro?

Su Internet c'è una spiegazione che segue: l'ambito del chicco predefinito nella configurazione a molla è singleton, che è sempre presente dopo l'avvio. Dichiarare che l'oggetto del bean è stato creato dinamicamente impostando la proprietà scope come prototipo. Tuttavia, se il tuo servizio stesso è un singleton, l'iniezione viene eseguita solo una volta.

@Autowired stesso è una modalità singleton, verrà eseguito solo una volta all'avvio del programma e non si avvierà una seconda volta anche se non definisce una modalità finale, quindi questo finale è privo di significato.

Può essere per impedire che il costruttore venga eseguito nuovamente mentre il programma è in esecuzione;

Oppure è più facile da capire, inoltre il finale si avvia solo una volta quando il programma inizia.






Precedente:Spring Boot+maven per costruire progetti rapidamente
Prossimo:Rilancio di memorabilia Internet cinese 2018
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com