Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 25865|Antwoord: 0

[Bron] Spring Boot leest (application.yml) de waarde van het configuratiebestand

[Link kopiëren]
Geplaatst op 07-01-2019 15:37:14 | | | |
Ten eerste application.yml configuratieprofiel als volgt:



Maven-project pom.xml pakketten toevoegen:




Maak een nieuw gemapt object aan met de volgende code:

Het stringtype moet een setter nodig hebben om eigenschappenwaarden te ontvangen; Kaarten, verzamelingen en arrays zijn niet vereist

Gebruik @Autowired annotaties om automatisch te injecteren, zoals te zien is in de volgende afbeelding:



esConfig geeft altijd null uit, ik heb lang naar een oplossing gezocht, maar faalde, er zal hieronder een oplossing zijn.

Laten we een nieuwe controller aanmaken, de code is als volgt:

De injectie is succesvol, en de waarden van het yml-configuratiebestand worden normaal verkregen, als volgt:



De redenen waarom EsClient niet succesvol kan worden geïnjecteerd zijn als volgt:

Noem een functie van deze klasse in de constructor, en de variabele van de @Autowired van deze klasse wordt in deze functie gebruikt.

Dus dacht ik dat het misschien mis zou gaan. Omdat @Autowired moet wachten tot de klasse is geconstrueerd voordat deze uit externe referenties kan worden ingesteld. Daarom moet de injectietijd van @Autowired later zijn dan de uitvoeringstijd van de constructor.
Oplossing:

Spring Team raadt aan: "Gebruik altijd constructor-gebaseerde afhankelijkheidsinjectie in je bonen. Gebruik altijd asserties voor verplichte afhankelijkheden".

Vertaling:

Spring stelt: "Stel altijd afhankelijkheidsinjectie vast met constructors in je boon. gebruik altijd asserties om afhankelijkheden af te dwingen".


Originele tekst:

Aangepast schrijfwerk:



PS: De initialisatievolgorde van Java-variabelen is: statische variabelen of statische statementblokken – > instantievariabelen of initialisatie-statementblokken – >constructiemethode – >@Autowired

Waarom zou je dan het laatste type toevoegen aan de lidvariabele?

Er is een uitleg op internet als volgt: De scope van de standaardboon in de veerconfiguratie is singleton, die er altijd is na het opstarten. Verklaar het object van de boon dynamisch gecreëerd door de scope-eigenschap op prototype te zetten. Als je service zelf echter een singleton is, wordt de injectie slechts één keer uitgevoerd.

@Autowired zelf een singleton-modus is, wordt deze slechts één keer uitgevoerd wanneer het programma start, en zal hij niet een tweede keer initialiseren, zelfs niet als er een final wordt gedefinieerd, dus deze final is betekenisloos.

Dit kan zijn om te voorkomen dat de constructor opnieuw wordt uitgevoerd terwijl het programma draait;

Of misschien is het makkelijker te begrijpen, plus dat de finale maar één keer wordt geïnitieerd wanneer het programma begint.






Vorig:Spring Boot+maven om snel projecten te bouwen
Volgend:2018 China Internet Memorabilia uitgebracht
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com