Първият application.yml конфигурационен профил е следният:
Maven Project pom.xml добавят пакети:
Създайте нов картографиран обект със следния код:
Типът на низовете трябва да изисква сетър, за да получи стойности на свойствата; карти, колекции и масиви не са необходими
Използвайте @Autowired анотации за автоматично инжектиране, както е показано на следното изображение:
esConfig винаги извежда null, търсех решение дълго време, но не успях, ще има решение по-долу.
Нека създадем нов контролер, кодът е следният:
Инжекцията е успешна и стойностите на yml конфигурационния файл се получават нормално, както следва:
Причините, поради които EsClient не може да бъде успешно инжектиран, са следните:
Извикай функция на този клас в конструктора и променливата на @Autowired на този клас се използва в тази функция.
Затова си помислих, че може да се обърка. Защото @Autowired трябва да изчакам класът да бъде конструиран, преди да може да бъде зададен от външни референции. Следователно времето за инжектиране на @Autowired трябва да е по-късно от времето на изпълнение на конструктора. Решение:
Spring Team препоръчва: "Винаги използвайте инжекция на зависимости базирана на конструктор в зърната си. Винаги използвайте твърдения за задължителни зависимости".
Превод:
Спринг препоръчва "Винаги въвеждайте инжекция на зависимост с конструктори в зърната си. винаги използвай твърдения, за да наложиш зависимости".
Оригинално писане:
Модифицирано писане:
PS: Редът на инициализация на Java променливите е: статични променливи или статични блокове с оператори – > инстанциални променливи или инициализационни блокове – >метод на конструиране – >@Autowired
Тогава защо да се добавя финалният тип към променливата на члена?
В интернет има следното обяснение: обхватът на стандартния боб в конфигурацията на пружината е singleton, който винаги е наличен след стартиране. Обявете обекта на зърна за динамично създаване, като зададете свойството scope на прототип. Въпреки това, ако самата услуга е еднократна, инжекцията се изпълнява само веднъж.
@Autowired е еднократен режим, той се изпълнява само веднъж при стартиране на програмата и няма да инициализира втори път, дори ако не дефинира финал, така че този финал е безсмислен.
Може да е за да се предотврати повторното изпълнение на конструктора, докато програмата работи;
Или може би е по-лесно за разбиране, плюс финалният се инициализира само веднъж при стартиране на програмата.
|