První application.yml konfigurační profil je následující:
Projekt Maven pom.xml přidání balíčků:
Vytvořte nový mapovaný objekt s následujícím kódem:
Typ řetězce musí potřebovat nastavovatele, aby mohl přijímat hodnoty vlastností; mapy, kolekce a pole nejsou vyžadovány
Použijte @Autowired anotace k automatickému vkládání, jak je znázorněno na následujícím obrázku:
esConfig vždy vyhodí null, dlouho hledal řešení, ale neuspěl, řešení bude níže.
Vytvoříme nový ovladač, kód je následující:
Injekce je úspěšná a hodnoty konfiguračního souboru yml jsou získány normálně, následovně:
Důvody, proč nelze EsClient úspěšně injektovat, jsou následující:
Vyvoláme funkci této třídy ve konstruktoru a proměnná @Autowired této třídy se použije v této funkciji.
Tak jsem si myslel, že by to mohlo dopadnout špatně. Protože @Autowired musí počkat, až bude třída vytvořena, než ji lze nastavit z externích referencí. Proto musí být doba vstání @Autowired pozdější než čas provedení konstruktoru. Řešení:
Spring Team doporučuje: "Vždy používejte injekci závislostí založenou na konstruktorech ve svých zrnech. Vždy používejte aserce pro povinné závislosti."
Překlad:
Spring navrhuje: "Vždy si nastavte závislostní injekci s konstruktory ve svém zrně. vždy používejte aserce k vynucení závislostí".
Původní text:
Upravené psaní:
PS: Pořadí inicializace Java proměnných je: statické proměnné nebo statické příkazové bloky – > instanční proměnné nebo inicializační příkazové bloky – >metoda konstrukce – >@Autowired
Tak proč přidávat finální typ k proměnné člena?
Na internetu existuje následující vysvětlení: Rozsah výchozího zrna v pružinové konfiguraci je singleton, který je vždy po startu. Deklarujte objekt zrna jako dynamicky vytvořený nastavením vlastnosti scope na prototyp. Pokud je však vaše služba sama o sobě singleton, injekce se provádí pouze jednou.
@Autowired je singleton mód, bude vykonán pouze jednou při spuštění programu a neinicializuje se podruhé, i když finále nedefinuje, takže tento finále je bezvýznamný.
Může to sloužit k zabránění opětovnému spuštění konstruktoru během běhu programu;
Nebo je to možná snazší pochopit, navíc finální zkouška se inicializuje jen jednou, když program začne.
|