Бин - это POJO (Простой старый Java-объект), которым управляет контейнер Spring.
Контейнеры Spring по умолчанию создают только один экземпляр компонента. Этот bean-компонент кэшируется в памяти, поэтому все запросы для bean-компонента будут возвращать общую ссылку на один и тот же bean-компонент.
Аннотация @Bean возвращает объект, который Spring регистрирует как bean-компонент в контексте приложения. Логика внутри метода отвечает за создание экземпляра.
Когда мы используем аннотацию @Bean?
Когда автоматическая настройка не вариант. Например, когда мы хотим связать компоненты из сторонней библиотеки, потому что исходный код недоступен, поэтому мы не можем аннотировать классы с помощью @Component.
Сценарий реального времени может заключаться в том, что кто-то хочет подключиться к корзине Amazon S3. Поскольку источник недоступен, ему придется создать @bean.
@Bean
public AmazonS3 awsS3Client() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsKeyId, accessKey);
return AmazonS3ClientBuilder.standard().withRegion(Regions.fromName(region))
.withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
}
Источник для кода выше -> https://www.devglan.com/spring-mvc/aws-s3-java
Потому что я упомянул аннотацию @Component выше.
@Component Указывает, что аннотированный класс является «компонентом». Такие классы рассматриваются как кандидаты для автоматического обнаружения при использовании конфигурации на основе аннотаций и сканирования пути классов.
Компонентная аннотация регистрирует класс как один компонент.