Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 25865|Svar: 0

[Källa] Spring Boot läser (application.yml) värdet i konfigurationsfilen

[Kopiera länk]
Publicerad på 2019-01-07 15:37:14 | | | |
Först application.yml konfigurationsprofil är följande:



Maven-projektet pom.xml lägga till paket:




Skapa ett nytt mappat objekt med följande kod:

Strängtypen måste behöva en setter för att få egenskapsvärden; Kartor, samlingar och arrayer krävs inte

Använd @Autowired annotationer för att automatiskt injicera, som visas i följande bild:



esConfig ger alltid null, sökte efter en lösning länge, men misslyckades, det finns en lösning nedan.

Låt oss skapa en ny kontroller, koden är följande:

Injektionen lyckas, och värdena för yml-konfigurationsfilen erhålls normalt, enligt följande:



Anledningarna till att EsClient inte kan injiceras framgångsrikt är följande:

Kalla en funktion av denna klass i konstruktorn, och variabeln av @Autowired i denna klass används i denna funktion.

Så jag trodde att det kunde gå fel. Eftersom @Autowired måste vänta på att klassen ska konstrueras innan den kan sättas från externa referenser. Därför måste injektionstiden för @Autowired vara senare än exekveringstiden för konstruktorn.
Lösning:

Spring Team rekommenderar "Använd alltid konstruktörbaserad beroendeinjektion i dina bönor." Använd alltid påståenden för obligatoriska beroenden".

Översättning:

Spring föreslår "Etablera alltid beroendeinjektion med konstruktörer i din böna. använd alltid påståenden för att tvinga fram beroenden".


Originaltext:

Modifierad text:



PS: Initialiseringsordningen för Java-variabler är: statiska variabler eller statiska satsblock – > instansvariabler eller initialiseringssatsblock – >konstruktionsmetod – >@Autowired

Så varför lägga till den sista typen till medlemsvariabeln?

Det finns en förklaring på internet som följer: Omfattningen av standardbönan i vårkonfigurationen är singleton, vilket alltid finns där efter uppstart. Deklarera att bönans objekt är dynamiskt skapat genom att sätta scope-egenskapen till prototype. Men om din tjänst i sig är en singleton, utförs injektionen bara en gång.

@Autowired i sig är ett singleton-läge kommer det bara att köras en gång när programmet startar, och det kommer inte att initiera en andra gång även om det inte definierar en final, så denna final är meningslös.

Det kan vara för att förhindra att konstruktorn körs igen medan programmet körs;

Eller så är det lättare att förstå, plus att final bara initieras en gång när programmet startar.






Föregående:Spring Boot+maven för att snabbt bygga projekt
Nästa:2018 års kinesiska internetmemorabilia släpptes
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com