Создание бина с параметрами SpringBoot

Для создания бина в SpringBoot мы используем класс, аннотированный @Component, с некоторыми методами создания бина, аннотированными аннотацией @Bean. Теперь я всегда использовал @Bean следующим образом:

@Bean
public func getSome() {
    return someFunc(param1, param2, param3);
}

Теперь то, что я видел в каком-то коде, это:

@Bean
public func getSome(Type1 param1, Type2 param2, Type 3 param3) {
    return someFunc(param1, param2, param3);
}

Таким образом, Beans создаются при загрузке контекста SpringBoot. Что меня здесь смущает, так это то, как SpringBoot подберет параметры в бине (второй пример).

Может кто-нибудь, пожалуйста, помогите мне понять это?

PS: Пожалуйста, дайте мне знать, если вопрос не ясен. :)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Spring выполнит стандартный поиск bean-компонентов типов Type1, Type2, Type3 в контексте. Если они не будут найдены, Spring попытается создать новые экземпляры, используя конструктор по умолчанию. Если нет конструктора по умолчанию, запуск завершится ошибкой.

Возможно, есть еще какие-то механики, но основы таковы.

@Bean похож на стереотипы Spring (@Component, @Service, @Controller, @RestController, @Repository и @Configuration).

Когда вы пишете метод с @Bean поверх него, это похоже на использование одного из стереотипов поверх класса с конструктором (с @Autowired), поэтому его зависимости могут быть внедрены через конструктор Spring; поэтому эти параметры должны быть компонентами Spring, чтобы их можно было внедрить в ваш аннотированный метод @Bean.

Spring понимает порядок внедрения через граф зависимостей, который Spring создает и начинает создавать bean-компоненты из классов, которые либо не имеют зависимостей, либо их зависимости были созданы и готовы к внедрению.

Другие вопросы по теме