Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 25865|Odpoveď: 0

[Zdroj] Spring Boot číta (application.yml) hodnotu konfiguračného súboru

[Kopírovať odkaz]
Zverejnené 7. 1. 2019 15:37:14 | | | |
Prvý application.yml konfiguračný profil je nasledovný:



Projekt Maven pom.xml pridávať balíky:




Vytvorte nový mapovaný objekt s nasledujúcim kódom:

Typ reťazca musí potrebovať nastavovača, aby mohol prijímať hodnoty vlastností; Mapy, kolekcie a polia nie sú potrebné

Použite @Autowired anotácie na automatické injektovanie, ako je znázornené na nasledujúcom obrázku:



esConfig vždy vyhodí null, dlho som hľadal riešenie, ale neúspešné, nižšie bude riešenie.

Vytvorme nový kontrolér, kód je nasledovný:

Injekcia je úspešná a hodnoty yml konfiguračného súboru sa získavajú normálne, nasledovne:



Dôvody, prečo EsClient nemožno úspešne injektovať, sú nasledovné:

Zavolajte funkciu tejto triedy v konštruktore a premenná @Autowired tejto triedy sa použije v tejto funkcii.

Tak som si myslel, že by sa to mohlo pokaziť. Pretože @Autowired musí počkať, kým sa trieda skonštruuje, aby mohla byť nastavená z externých referencií. Preto musí byť čas injekcie @Autowired neskôr, než je čas vykonania konštruktora.
Riešenie:

Spring Team odporúča: "Vždy používajte injekciu závislostí založenú na konštruktoroch vo svojich zrnách. Vždy používajte assertions pre povinné závislosti."

Preklad:

Spring navrhuje: "Vždy si nastavte závislostnú injekciu s konštruktormi vo vašom zrne. vždy používajte tvrdenia na vynútenie závislostí".


Pôvodné písanie:

Upravené písanie:



PS: Poradie inicializácie Java premenných je: statické premenné alebo statické príkazové bloky – > inštancia premenné alebo inicializačné príkazové bloky – >metóda konštrukcie – >@Autowired

Prečo teda pridať finálny typ k členovej premennej?

Na internete existuje nasledovné vysvetlenie: Rozsah predvoleného zrna v pružinovej konfigurácii je singleton, ktorý je vždy prítomný po štarte. Deklarujte objekt fazule ako dynamicky vytvorený nastavením vlastnosti scope na prototyp. Ak je však vaša služba samotná singleton, injekcia sa vykoná len raz.

@Autowired je singleton režim, vykoná sa iba raz pri spustení programu a neinicializuje sa druhýkrát, aj keď nedefinuje finálny režim, takže tento finálny režim je bezvýznamný.

Môže to byť na zabránenie opätovného spustenia konštruktora počas bežiaceho programu;

Alebo je to možno jednoduchšie pochopiteľné, navyše finálna skúška sa inicializuje len raz, keď program začne.






Predchádzajúci:Spring Boot+maven na rýchle budovanie projektov
Budúci:Čínske internetové memorabilie z roku 2018 vydané
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com