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.
|