Ответ
Методы, помеченные @Bean, должны находиться в классах, аннотированных @Configuration.
@Configuration — это специализированная форма @Component, которая указывает Spring, что класс содержит конфигурацию на основе Java-кода и определения бинов.
Пример (предпочтительный способ):
@Configuration
public class AppConfig {
@Bean
public DataSource dataSource() {
return new HikariDataSource(); // Возвращаемый объект регистрируется как бин
}
@Bean
public MyService myService() {
return new MyServiceImpl(dataSource()); // Вызов метода будет проксирован для возврата одного и того же бина
}
}
Ключевые моменты:
@Configurationобеспечивает проксирование вызовов@Bean-методов внутри класса. Это гарантирует, что вызовdataSource()вmyService()вернет уже созданный Spring-ом singleton-бин, а не создаст новый экземпляр.@Beanтакже можно использовать в классах с@Component, но это менее предпочтительно. В этом режиме (lite mode) вызовы методов не проксируются, что может привести к созданию нескольких экземпляров при внутренних вызовах.@Bean— это аналог XML-элемента<bean/>, но реализованный на Java.