Esimene application.yml konfiguratsiooniprofiil on järgmine:
Maveni projekt pom.xml lisapakette:
Loo uus kaardistatud objekt järgmise koodiga:
Stringitüüp peab vajama seadistajat, et saada omadusväärtusi; Kaardid, kogud ja massiivid ei ole vajalikud
Kasuta @Autowired annotatsioone automaatseks süstimiseks, nagu näidatud järgmisel pildil:
esConfig väljastab alati nulli, otsisin lahendust kaua, aga ebaõnnestusin, lahendus on allpool.
Loome uue kontrolleri, kood on järgmine:
Süstimine õnnestub ning yml konfiguratsioonifaili väärtused saadakse tavapäraselt järgmiselt:
Põhjused, miks EsClienti ei saa edukalt süstida, on järgmised:
Kutsume selle klassi funktsiooni konstruktoris ja selle klassi @Autowired muutujat kasutatakse selles funktsioonis.
Nii et arvasin, et see võib valesti minna. Sest @Autowired peab ootama, kuni klass on konstrueeritud, enne kui seda saab väliste viidete põhjal seadistada. Seetõttu peab @Autowired süstimisaeg olema hilisem kui konstruktori täitmisaeg. Lahus:
Spring Team soovitab: "Kasuta alati oma ubades konstruktoripõhist sõltuvussüstit. Kasuta alati väiteid kohustuslike sõltuvuste puhul."
Tõlge:
Spring soovitab: "Alati looge sõltuvussüstimine oma ubade konstruktoritega. kasuta alati väiteid, et sundida sõltuvusi".
Originaaltekst:
Muudetud kirjutis:
PS: Java muutujate initsialiseerimise järjekord on: staatilised muutujad või staatilised avaldusplokid – > instantsimuutujad või initsialiseerimise lauseplokid – >ehitusmeetod – >@Autowired
Miks siis lisada lõplik tüüp liikmemuutujale?
Internetis on selgitus järgmine: Vaikimisi oa ulatus vedrukonfiguratsioonis on singleton, mis on alati olemas pärast käivitamist. Kuuluta ubade objekt dünaamiliselt lootuks, seades scope'i omaduse prototüübiks. Kui aga teenus ise on üksik, tehakse süstimist vaid üks kord.
@Autowired ise on singleton-režiim, käivitatakse see programmi käivitamisel ainult korra ning see ei initsialiseeri teist korda, isegi kui see ei määra lõplikku režiimi, seega on see lõpp mõttetu.
See võib olla selleks, et takistada konstruktori uuesti käivitamist programmi töötamise ajal;
Või ehk on seda lihtsam mõista, pluss lõplik initsialiseerimine algab ainult korra, kui programm algab.
|