Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 25865|Ответ: 0

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

[Скопировать ссылку]
Опубликовано 07.01.2019 15:37:14 | | | |
Первый application.yml конфигурационный профиль выглядит следующим образом:



Проект Maven pom.xml добавление пакетов:




Создайте новый отображённый объект с помощью следующего кода:

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

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



esConfig всегда выводит null, долго искал решение, но не смог — решение будет ниже.

Давайте создадим новый контроллер, код выглядит следующим образом:

Инъекция проходит успешно, и значения конфигурационного файла yml получаются нормально, следующим образом:



Причины, по которым EsClient не может быть успешно внедрен, следующие:

Вызовем функцию этого класса в конструкторе, и переменная @Autowired этого класса используется в этой функции.

Так что я подумал, что что-то может пойти не так. Потому что @Autowired нужно ждать, пока класс будет построен, прежде чем его можно будет задать из внешних ссылок. Поэтому время ввода @Autowired должно быть позже времени выполнения конструктора.
Решение:

Spring Team рекомендует: «Всегда используйте инъекции зависимостей на основе конструкторов в зёрна. Всегда используйте утверждения для обязательных зависимостей».

Перевод:

Спринг советует: «Всегда устанавливайте инъекции зависимости с помощью конструкторов в вашем зерне. всегда используйте утверждения для принудительного создания зависимости».


Оригинальный текст:

Изменённый текст:



PS: Порядок инициализации переменных Java следующий: статические переменные или статические блоки операторов — > экземплярные переменные или инициализационные блоки операторов — >метод построения — >@Autowired

Так зачем же добавлять финальный тип к переменной элемента?

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

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

Это может быть сделано для предотвращения повторного выполнения конструктора во время работы программы;

Или, может быть, это проще понять, плюс финальная программа инициализируется только один раз при старте программы.






Предыдущий:Spring Boot+maven для быстрого создания проектов
Следующий:Выпущена китайская интернет-меморабилия 2018 года
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com