Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 25865|Отговор: 0

[Източник] Spring Boot чете (application.yml) стойността на конфигурационния файл

[Копирай линк]
Публикувано в 7.01.2019 г. 15:37:14 ч. | | | |
Първият application.yml конфигурационен профил е следният:



Maven Project pom.xml добавят пакети:




Създайте нов картографиран обект със следния код:

Типът на низовете трябва да изисква сетър, за да получи стойности на свойствата; карти, колекции и масиви не са необходими

Използвайте @Autowired анотации за автоматично инжектиране, както е показано на следното изображение:



esConfig винаги извежда null, търсех решение дълго време, но не успях, ще има решение по-долу.

Нека създадем нов контролер, кодът е следният:

Инжекцията е успешна и стойностите на yml конфигурационния файл се получават нормално, както следва:



Причините, поради които EsClient не може да бъде успешно инжектиран, са следните:

Извикай функция на този клас в конструктора и променливата на @Autowired на този клас се използва в тази функция.

Затова си помислих, че може да се обърка. Защото @Autowired трябва да изчакам класът да бъде конструиран, преди да може да бъде зададен от външни референции. Следователно времето за инжектиране на @Autowired трябва да е по-късно от времето на изпълнение на конструктора.
Решение:

Spring Team препоръчва: "Винаги използвайте инжекция на зависимости базирана на конструктор в зърната си. Винаги използвайте твърдения за задължителни зависимости".

Превод:

Спринг препоръчва "Винаги въвеждайте инжекция на зависимост с конструктори в зърната си. винаги използвай твърдения, за да наложиш зависимости".


Оригинално писане:

Модифицирано писане:



PS: Редът на инициализация на Java променливите е: статични променливи или статични блокове с оператори – > инстанциални променливи или инициализационни блокове – >метод на конструиране – >@Autowired

Тогава защо да се добавя финалният тип към променливата на члена?

В интернет има следното обяснение: обхватът на стандартния боб в конфигурацията на пружината е singleton, който винаги е наличен след стартиране. Обявете обекта на зърна за динамично създаване, като зададете свойството scope на прототип. Въпреки това, ако самата услуга е еднократна, инжекцията се изпълнява само веднъж.

@Autowired е еднократен режим, той се изпълнява само веднъж при стартиране на програмата и няма да инициализира втори път, дори ако не дефинира финал, така че този финал е безсмислен.

Може да е за да се предотврати повторното изпълнение на конструктора, докато програмата работи;

Или може би е по-лесно за разбиране, плюс финалният се инициализира само веднъж при стартиране на програмата.






Предишен:Spring Boot+maven за бързо изграждане на проекти
Следващ:Публикувани интернет сувенири в Китай през 2018 г.
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com