Spring Boot: вызов метода @Bean несколько раз - PullRequest
0 голосов
/ 27 мая 2020

Предположим, у нас есть метод для создания некоторого bean-компонента

@Bean MongoClient getMongo() {}

Иногда я вижу в примерах людей, которые несколько раз вызывают сам метод, когда они хотят использовать bean-компонент (в наш пример getMongo())

Позволяет ли Spring Boot каким-то образом создавать компонент только один раз или он создается при каждом вызове метода?

1 Ответ

2 голосов
/ 28 мая 2020

Фактически каждый раз вы получаете один и тот же объект. Как было сказано, область действия по умолчанию для Spring beans - singleton, что означает, что в контейнере Spring есть только один экземпляр вашего класса.

Почему вы каждый раз получаете один и тот же объект?

Это потому, что аннотация @Configuration, которую вы использовали в своем классе, подразумевает создание прокси (который является подклассом вашего класса, аннотированного с помощью @Configuration). Этот прокси хранит синглтон и возвращает ссылку на него всякий раз, когда вы вызываете метод @Bean.

Почему метод @Bean возвращает ссылку вместо создания объекта, как в реализации?

Прокси-сервер также переопределяет ваш метод @Bean.

...