Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 25865|Svare: 0

[Kilde] Spring Boot leser (application.yml) verdien av konfigurasjonsfilen

[Kopier lenke]
Publisert på 07.01.2019 15:37:14 | | | |
For det første application.yml konfigurasjonsprofilen er som følger:



Maven-prosjektet pom.xml legge til pakker:




Lag et nytt kartlagt objekt med følgende kode:

Strengtypen må trenge en setter for å motta egenskapsverdier; Kart, samlinger og arrays er ikke påkrevd

Bruk @Autowired annotasjoner for automatisk å injisere, som vist i følgende bilde:



esConfig gir alltid null, har lett etter en løsning lenge, men feilet, det vil finnes en løsning nedenfor.

La oss lage en ny kontroller, koden er som følger:

Injeksjonen er vellykket, og verdiene til yml-konfigurasjonsfilen oppnås normalt, som følger:



Årsakene til at EsClient ikke kan injiseres med suksess er som følger:

Kall en funksjon av denne klassen i konstruktøren, og variabelen til @Autowired i denne klassen brukes i denne funksjonen.

Så jeg trodde det kunne gå galt. Fordi @Autowired må vente på at klassen er konstruert før den kan settes fra eksterne referanser. Derfor må injeksjonstiden til @Autowired være senere enn utførelsestiden til konstruktøren.
Løsning:

Spring Team anbefaler «Bruk alltid konstruktørbasert avhengighetsinjeksjon i bønnene dine. Bruk alltid assertions for obligatoriske avhengigheter".

Oversettelse:

Spring foreslår: «Etabler alltid avhengighetsinjeksjon med konstruktører i bønnen din. bruk alltid påstander for å tvinge frem avhengigheter".


Original manus:

Modifisert skriving:



PS: Initialiseringsrekkefølgen for Java-variabler er: statiske variabler eller statiske setningsblokker – > instansvariabler eller initialiseringsblokker – >konstruksjonsmetode – >@Autowired

Så hvorfor legge til den siste typen i medlemsvariabelen?

Det finnes en forklaring på Internett som følger: Omfanget av standardbønnen i vårkonfigurasjonen er singleton, som alltid er der etter oppstart. Erklære bønnens objekt som dynamisk opprettet ved å sette scope-egenskapen til prototype. Men hvis tjenesten din i seg selv er en singleton, utføres injeksjonen bare én gang.

@Autowired selv er en singleton-modus, vil den bare bli kjørt én gang når programmet starter, og den vil ikke initialisere en andre gang selv om den ikke definerer en final, så denne finalen er meningsløs.

Det kan være for å forhindre at konstruktøren kjøres igjen mens programmet kjører;

Eller kanskje det er lettere å forstå, pluss at final bare initialiseres én gang når programmet starter.






Foregående:Spring Boot+maven for å bygge prosjekter raskt
Neste:2018 Kina Internett-memorabilia utgitt
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com