Az első application.yml konfigurációs profil a következő:
Maven projekt pom.xml csomagok hozzáadása:
Hozz létre egy új leképezett objektumot a következő kóddal:
A string típusnak szüksége kell egy setterre a tulajdonságértékek fogadásához; Térképek, gyűjtemények és tömbök nem szükségesek
Használj @Autowired annotációkat az automatikus injektáláshoz, ahogy az alábbi képen is látható:
Az esConfig mindig null kimenetet ad, hosszú ideig kerestem megoldást, de sikertelenül, lentebb lesz megoldás.
Hozzunk létre egy új vezérlőt, a kód a következő:
Az injekció sikeres, és az yml konfigurációs fájl értékei normálisan kapják meg a következőket:
Az EsClient injektálásának okai a következők:
Hívjuk meg ennek az osztálynak a függvényét a konstruktorban, és ennek az osztálynak a @Autowired változóját használják ebben a függvényben.
Szóval azt hittem, hogy rosszul sülhet el. Mert @Autowired várniuk kell, amíg az osztály megépül, mielőtt külső hivatkozásokból be lehetne állítani. Ezért @Autowired befecskendezési idejének későbbnek kell lennie, mint a konstruktor végrehajtási ideje. Megoldás:
A Spring Team azt javasolja: "Mindig használj építő alapú függőségi injekciót a babodban. Mindig használj állításokat kötelező függőségekhez."
Fordítás:
A Spring azt javasolja: "Mindig alakíts ki függőségi injekciót a babodban lévő konstruktorokkal. mindig használj állításokat függőségek kényszerítésére".
Eredeti írás:
Módosított írás:
PS: A Java változók inicializációs sorrendje a következő: statikus változók vagy statikus állításblokkok – > instance változók vagy inicializációs utasításblokkok – >építési módszer – >@Autowired
Akkor miért adják hozzá a végső típust a tagváltozóhoz?
Az interneten a következő magyarázat található: Az alapértelmezett bab hatóköre a tavaszi konfigurációban singleton, ami az indítás után mindig ott van. Nyilvánítsuk be a bab objektumát dinamikusan létrehozottnak azzal, hogy a scope tulajdonságot prototípusra állítjuk. Ha viszont maga a szolgáltatásod egy-egy injekció, akkor az injekciót csak egyszer hajtják végre.
@Autowired maga egy-egy mód, csak egyszer hajtják végre a program indításakor, és nem indul második alkalommal is, még akkor sem, ha nem határoz meg véglegeset, így ez a záró értelmetlen.
Lehet, hogy megakadályozza, hogy a konstruktor újra elinduljon a program futása közben;
Vagy talán könnyebb megérteni, ráadásul a végső csak egyszer indul el a program.
|