Comments 8
XML-конфигурация контекста, автовайринг в поля — в итоге странный учебник, учащий старым практикам работы со спрингом.
1. Пример с xml — очень плохо.
2. Еще не хватает объяснения, откуда появляется файл
3. Статьи на хабре читает много новичков; и инжект сервисов в properties, вы шутите?
И какой смысл использовать всю эту кашу с метаданными вне стартеров?
2. Еще не хватает объяснения, откуда появляется файл
additional-spring-configuration-metadata.json
и как он связан с spring-boot-configuration-processor
.3. Статьи на хабре читает много новичков; и инжект сервисов в properties, вы шутите?
И какой смысл использовать всю эту кашу с метаданными вне стартеров?
— Где сказано, что xml legacy?
— additional-spring-configuration-metadata — делаем сами, если нужны hints, это клон spring-configuration-metadata.
— ограничений на типы которые можно указать в properties практически нет, сделано это как я понимаю не случайно. И типы Providers для этого сделаны тоже: class-reference, spring-bean-reference и др. Видимо разработчики spring видят в этом смысл.
— additional-spring-configuration-metadata — делаем сами, если нужны hints, это клон spring-configuration-metadata.
— ограничений на типы которые можно указать в properties практически нет, сделано это как я понимаю не случайно. И типы Providers для этого сделаны тоже: class-reference, spring-bean-reference и др. Видимо разработчики spring видят в этом смысл.
Спасибо за статью! Пара моментов, больше для читателей, из того, что не упомянуто:
- Самое важное —
@ConfigurationProperties
это не только про загрузку свойств из application.properties файла. Возможности Spring Boot Configuration гораздо шире — поддерживается 17 (!) разных источников свойств в строгом приоритете. Можно определить дефолт в application.properties и перекрыть его через переменную окружения, JVM properties, профиль, тестовые свойства и т.п. Что дает очень мощные возможности для переконфигурирования приложения в нужном окружении и сильно упрощает конфигурацию. А в дополнение — список источников еще и можно расширять, например, добавить Hashicorp Vault как бэкенд. ConfigurationProperties
аннотация — это часть Spring Boot, а не Spring Core@SpringBootApplication
аннотация включаетComponentScan
, так что XML конфигурацию (да и любую конфигурацию) можно убрать и просто аннотировать классы@Component
. Хотя некоторые разработчики предпочитают явную конфигурацию над автоматическим поиском компонентов.- Конфигурировать можно не только классы properties, а вообще любой бин — если совместить
@Bean
+@ConfigurationProperties
или@Component
+@ConfigurationProperties
. По сути, все, что делает@EnableConfigurationProperties
— это регистрирует бин указанного типа. - Field и Property injection это, все же, моветон, хотя и не запрещено.
1. Как минимум, здесь отсутствует типобезопасность.
2. Замечание не на тему того, кто чей клон, а откуда этот файл берется. Его генерирует определенный annotation processor. Кому нужно делать rebuild проекта ради какой-то подсветки? Вся эта каша нужна в библиотеках и стартерах. Или в 2018 кто-то еще зашивает конфиги в поставку?
3. Это нужно не для инжекта бизнес логики в конфиг! А для создания сложных библиотечных конфигураций, завязанных на стандартных интерфейсах из jsl или кастомной абстракции. В примере из статьи присутствует явное нарушение single responsibility principle.
2. Замечание не на тему того, кто чей клон, а откуда этот файл берется. Его генерирует определенный annotation processor. Кому нужно делать rebuild проекта ради какой-то подсветки? Вся эта каша нужна в библиотеках и стартерах. Или в 2018 кто-то еще зашивает конфиги в поставку?
3. Это нужно не для инжекта бизнес логики в конфиг! А для создания сложных библиотечных конфигураций, завязанных на стандартных интерфейсах из jsl или кастомной абстракции. В примере из статьи присутствует явное нарушение single responsibility principle.
ConfigurationProperties
нужно использовать либо в автоконфигурации, либо в сервисе, которому эти конфиги нужны (второе решение — так себе). Код из примера можно понять таким образом (а ведь он именно и написан в таком стиле), что надо все бины прятать в конфиги и через конфиги получать к бинам доступ. А потом кто-то жалуется на невозможность зарезолвить циклические зависимости и тратит по неделе на фикс простейшего бага.Sign up to leave a comment.
Настройка приложения — Spring Configuration Metadata