Ответ
Аннотация @Bean используется в Spring для явного объявления бина в контексте приложения. Она помечает метод, возвращаемый объект которого регистрируется как управляемый Spring-ом бин.
Основное применение:
- Конфигурация бинов, когда исходный код класса нельзя изменить (например, классы из сторонних библиотек).
- Тонкая настройка бина перед его внедрением.
Пример в классе конфигурации:
@Configuration
public class AppConfig {
// Объявляем бин с именем "myService" (по умолчанию — имя метода)
@Bean
public MyService myService() {
return new MyServiceImpl();
}
// Бин с явным указанием имени и зависимостью от другого бина
@Bean("dataSource")
public DataSource dataSource() {
HikariDataSource ds = new HikariDataSource();
ds.setJdbcUrl("jdbc:h2:mem:testdb");
return ds;
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
// Spring автоматически внедрит DataSource, объявленный выше
return new JdbcTemplate(dataSource);
}
}
Ключевые особенности:
- Методы с
@Beanдолжны находиться в классах, аннотированных@Configuration(реже@Component). - Spring вызывает такой метод один раз, кэшируя результат, если не указана другая область видимости (например,
@Scope("prototype")). - Зависимости между бинами можно указывать через параметры метода.
- Позволяет использовать условное создание бинов с помощью аннотаций
@Conditional.