Тот факт, что вы используете @Override
в этом случае, не имеет прямого отношения к концепции переопределения Spring Bean. Spring отслеживает bean-компоненты по имени, и можно заменить bean-компонент на другой с тем же именем - это используется не очень часто, но иногда необходимо обходить сложные ситуации. @Override
определенно является битом наследования Java.
В вашем случае ваша установка должна работать так, как вы ожидаете, потому что, когда Spring создает экземпляр вашего компонента, он будет вызывать MongoConfiguration#mongoTemplate()
. Если бы определения были в разных классах, то они оба производили бы бины с именем mongoTemplate
, и последний из оцененных выиграл бы (есть хитрые приемы для контроля этого явно, либо с использованием @Order
, либо путем внедрения другой конфигурации, но это не так. идеал).
Обратите внимание, что в этом конкретном случае вы можете предпочесть автоматическую настройку Spring Boot, и в этом случае вы не переопределите метод Java. Вместо этого вы можете ввести MongoTemplate
и просто вызвать для него метод setter, либо написав ApplicationRunner
, либо прослушивая ContextRefreshedEvent
.