Регистрация компонентов Spring и Spring, управляющих жизненным циклом этих компонентов, являются отдельными операциями.Нужно сделать все бины доступными для Spring, чтобы Spring мог управлять их жизненным циклом.
Существует несколько способов регистрации бинов (не исчерпывающий список).
- XMLфайлы
Java-аннотации - @ComponentScan
/ @Configuration
/ @Component
- некоторые примеры такой регистрации.
PostProcessors - это еще один способ сделать то же самое.
spring.factories
- Вы можете даже добавить все свои бины в META-INF/spring.factories
подспециальное свойство и сделайте все компоненты доступными для вашего загрузочного приложения Spring.
- Индекс компонента-кандидата
- Функциональный стиль регистрации с поставщиками, который ленив и без отражениярасходы.См. [1]
Вы можете даже смешивать и сочетать один или несколько из вышеперечисленных механизмов, и Spring выполнит их все.
Чтобы ответить на ваш конкретный вопрос, указанный выше:
> Is it an anti-paradigm to register that beans programmatically, since Spring does not take care of what I did in the configuration file?
Определенно нет.Вы можете зарегистрировать бины одним или несколькими способами, но это не меняет того, как Spring будет относиться к ним, когда дело доходит до связывания зависимостей.
Причина, по которой существует так много механизмов регистрации, заключается в том, чтобы дать разработчику приложениявыбор, чтобы выбрать наиболее подходящий механизм в зависимости от их варианта использования, возможно, переходя на более новые, более оптимизированные методы.
Когда вы запрашиваете все bean-компоненты определенного типа в Map<String, Foo>
, Spring предоставит вам всезависимости независимо от того, как они были зарегистрированы.
Придерживайтесь нескольких механизмов регистрации (как можно меньше), которые работают для вас, чтобы ваши товарищи по команде могли понять и поддерживать, как бины подключаются,
[1] - Что нового в Spring 5.x