Prvi application.yml konfiguracijski profil je naslednji:
Projekt Maven pom.xml dodajanje paketov:
Ustvarite nov preslikan objekt z naslednjo kodo:
Tip niza mora za prejemanje vrednosti lastnosti zahtevati nastavljalca; zemljevidi, zbirke in polja niso potrebni
Uporabite @Autowired opomb za samodejno vbrizgavanje, kot je prikazano na naslednji sliki:
esConfig vedno izpiše null, dolgo sem iskal rešitev, a ni uspela, spodaj bo rešitev.
Ustvarimo nov krmilnik, koda je naslednja:
Vbrizgavanje je uspešno, vrednosti konfiguracijske datoteke yml pa se dobijo običajno, kot sledi:
Razlogi, zakaj EsClient ni mogoče uspešno vbrizgati, so naslednji:
Pokličimo funkcijo tega razreda v konstruktorju, spremenljivka @Autowired tega razreda pa se uporabi v tej funkciji.
Zato sem mislil, da bi lahko šlo kaj narobe. Ker @Autowired mora počakati, da se razred konstruira, preden ga lahko nastavimo iz zunanjih referenc. Zato mora biti čas vbrizgavanja @Autowired kasnejši od časa izvedbe konstruktorja. Rešitev:
Spring Team priporoča: "Vedno uporabljajte vbrizgavanje odvisnosti na osnovi konstruktorja v svojih zrnih. Vedno uporabljajte trditve za obvezne odvisnosti."
Prevod:
Spring predlaga: »Vedno vzpostavite injiciranje odvisnosti s konstruktorji v svojem zrnu. vedno uporabljajte trditve za prisilitev odvisnosti".
Izvirno pisanje:
Spremenjeno besedilo:
PS: Inicializacijski vrstni red Java spremenljivk je: statične spremenljivke ali statični stavkovni bloki – > instancijskih spremenljivk ali inicializacijski stavkovni bloki – >metoda gradnje – >@Autowired
Zakaj torej dodajati končni tip članski spremenljivki?
Na internetu obstaja razlaga kot naslednja: Obseg privzetega zrna v vzmetni konfiguraciji je singleton, ki je vedno prisoten po zagonu. Objekt zrna označite kot dinamično ustvarjen tako, da nastavite lastnost obsega na prototip. Če pa je vaša storitev samostojna, se injekcija izvede le enkrat.
@Autowired sam je enojni način, izvede se le enkrat, ko se program začne, in se ne inicializira drugič, tudi če ne definira končnega zaključka, zato je ta končni način brez pomena.
Morda je namenjen preprečevanju ponovnega izvajanja konstruktorja med izvajanjem programa;
Ali pa je morda lažje razumeti, poleg tega pa se končni program inicializira le enkrat, ko se program začne.
|