Ответ
Нет, аннотация @Configuration не является единственным способом конфигурации Spring. Доступны альтернативные подходы:
- Компонентное сканирование и стереотипные аннотации (
@Component,@Service,@Repository). Подходит для простого объявления бинов. - Декларативная XML-конфигурация.
- Java-конфигурация без
@Configuration. Можно размещать методы с@Beanвнутри обычного класса, но это имеет ключевое ограничение:- Отсутствие проксирования (CGLIB): вызовы между
@Bean-методами будут обычными вызовами Java, что может привести к созданию нескольких независимых экземпляров (нарушение семантики синглтона в контексте).
- Отсутствие проксирования (CGLIB): вызовы между
Пример проблемного кода без @Configuration:
public class AppConfig {
@Bean
public DataSource dataSource() {
return new DriverManagerDataSource();
}
@Bean
public JdbcTemplate jdbcTemplate() {
// Вызов dataSource() создаст НОВЫЙ экземпляр, а не вернет бин из контекста.
return new JdbcTemplate(dataSource());
}
}
Рекомендация: Для полноценной Java-конфигурации, где требуется взаимодействие между бинами, всегда используйте @Configuration. Она обеспечивает проксирование, гарантирующее, что вызовы @Bean-методов возвращают бины из контекста Spring.