Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 25865|Odpowiedź: 0

[Źródło] Spring Boot odczytuje (application.yml) wartość pliku konfiguracyjnego

[Skopiuj link]
Opublikowano 07.01.2019 15:37:14 | | | |
Pierwszy application.yml profil konfiguracji wygląda następująco:



Projekt Maven pom.xml dodanie pakietów:




Stwórz nowy obiekt mapowany z następującym kodem:

Typ ciągu musi wymagać twórcy, aby otrzymać wartości właściwości; Mapy, kolekcje i tablice nie są wymagane

Użyj @Autowired adnotacji do automatycznego wstrzykiwania, jak pokazano na poniższym obrazku:



esConfig zawsze daje null, długo szukałem rozwiązania, ale nie powiódł się, poniżej znajduje się rozwiązanie.

Stwórzmy nowy kontroler, kod wygląda następująco:

Wstrzyknięcie kończy się sukcesem, a wartości pliku konfiguracyjnego yml są uzyskiwane normalnie, w następujący sposób:



Powody, dla których EsClient nie może być skutecznie wstrzyknięty, są następujące:

Zwołajmy funkcję tej klasy w konstruktorze, a zmienna @Autowired tej klasy jest używana w tej funkcji.

Pomyślałam więc, że może coś pójść nie tak. Ponieważ @Autowired trzeba poczekać na skonstruowanie klasy, zanim będzie można ją ustawić z zewnętrznych referencji. Dlatego czas wstrzyknięcia @Autowired musi być późniejszy niż czas wykonania konstruktora.
Rozwiązanie:

Spring Team zaleca: "Zawsze stosuj zastrzyk zależności oparty na konstruktorach w ziarnach. Zawsze używaj asercji dla obowiązkowych zależności".

Tłumaczenie:

Spring sugeruje: "Zawsze ustanawiaj wstrzykiwanie zależności z konstruktorami w ziarnie. zawsze używaj asercji, aby wymusić zależności".


Oryginalne teksty:

Zmodyfikowane pismo:



PS: Kolejność inicjalizacji zmiennych Java to: zmienne statyczne lub statyczne bloki instrukcji – > zmienne instancyjne lub bloki instrukcji inicjalizacji – >metoda konstrukcyjna – >@Autowired

Dlaczego więc dodaje ostatni typ do zmiennej członka?

W Internecie jest następujące wyjaśnienie: zakres domyślnego ziarna w konfiguracji sprężynowej to singleton, który zawsze jest dostępny po uruchomieniu. Oświadcz, że obiekt ziarna jest tworzony dynamicznie, ustawiając właściwość zakresu na prototyp. Jednak jeśli sama usługa jest singleton, iniekcja jest wykonywana tylko raz.

@Autowired sam jest trybem singleton, zostanie wykonany tylko raz na początku programu i nie inicjalizuje drugiego razu, nawet jeśli nie definiuje ostatecznego etapu, więc ten final nie ma znaczenia.

Może to mieć na celu uniemożliwienie ponownego uruchomienia konstruktora podczas działania programu;

A może jest łatwiej zrozumieć, a finale iinicializuje się tylko raz po uruchomieniu programu.






Poprzedni:Spring Boot+maven, by szybko budować projekty
Następny:Wydanie chińskich pamiątek internetowych 2018
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com