Un Bean es un POJO (Objeto Java antiguo simple), que es administrado por el contenedor de primavera.
Los contenedores Spring crean solo una instancia del bean por defecto. Este bean se almacena en la memoria caché, por lo que todas las solicitudes del bean devolverán una referencia compartida al mismo bean.
La anotación @Bean devuelve un objeto que Spring registra como un bean en el contexto de la aplicación. La lógica dentro del método es responsable de crear la instancia.
¿Cuándo usamos la anotación @Bean?
Cuando la configuración automática no es una opción. Por ejemplo, cuando queremos conectar componentes de una biblioteca de terceros, porque el código fuente no está disponible, por lo que no podemos anotar las clases con @Component.
Un escenario en tiempo real podría ser que alguien quiera conectarse al bucket de Amazon S3. Debido a que la fuente no está disponible, tendría que crear un @bean.
@Bean
public AmazonS3 awsS3Client() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsKeyId, accessKey);
return AmazonS3ClientBuilder.standard().withRegion(Regions.fromName(region))
.withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
}
Fuente del código anterior -> https://www.devglan.com/spring-mvc/aws-s3-java
Porque mencioné la anotación @Component arriba.
@Component Indica que una clase anotada es un "componente". Dichas clases se consideran candidatos para la detección automática cuando se utiliza la configuración basada en anotaciones y el escaneo de rutas de clase.
La anotación de componentes registra la clase como un solo bean.