¿Cuál es la diferencia entre @Component y @Bean?
Opciones
- No hay diferencia; ambos registran un bean de la misma forma
@Componentescanea tu clase;@Beanusa el resultado de un método (Opción correcta)@Beanes solo para tests, no para código de producción@Componentsolo se puede poner en interfaces, no en clases
Respuesta
@Component va en una clase tuya y se encuentra por escaneo; @Bean va en un método dentro de una clase @Configuration y registra el objeto devuelto, útil para clases de terceros
Por qué
@Component (y sus stereotypes) anota tu propia clase, y Spring la descubre por component scanning.
@Bean se coloca en un método de una clase @Configuration. El objeto devuelto se registra como bean. Úsalo cuando no puedes anotar la clase (una clase de librería como ObjectMapper o RestClient) o cuando la construcción necesita lógica propia.
@Configuration
public class AppConfig {
@Bean
public Clock clock() {
return Clock.systemUTC();
}
}Recuerda
@Component = mi clase. @Bean = un método factory para cualquier clase.