Para definir un nuevo bean en Spring tenemos dos opciones:
- Podemos definir explícitamente un nuevo bean mediante la anotación @Bean.
- Podemos marcar una clase Java como un bean, y permitir a Spring que lo descubra, esto se hace mediante el escaneo de componentes.
Estas son dos técnicas diferentes para añadir beans a nuestro contexto.
Una clase con la anotación @Component es un candidato a ser escaneado mediante el proceso de negociación, e instanciado como un bean y añadido al contexto.
Actualmente nunca definimos el escaneo de componentes. Spring Boot ya se encarga de que esta funcionalidad esté disponible. Nuestra aplicación esta anotada mediante la anotación @SpringBootApplication.
Si nos fijamos en la anotación @SpringBootApplication y abrimos su clase para verla (SpringBootApplication.class), vemos que hace uso de la anotación @ComponentScan:

Esto hace un escaneo de todos los componentes que se encuentren BAJO la misma estructura de paquetes en que hemos usado la aplicación @SpringBootApplication.
Esto puede tener su parte mala, ya que puede que haya componentes que no queremos que sean escaneados. En ese caso debemos usar otras medidas. Exceptuando esto, hace que nuestro trabajo sea mucho más cómodo y simple.
¿Y si queremos escanear un paquete en concreto?
Si no queremos escanear todos los componentes, si queremos escanear los componentes de un paquete en concreto podemos usar una opción de la anotación: scanBasePackages. Veamos cómo podemos usar scanBasePackages.
@SpringBootApplication(scanBasePackages = "com.carlos.app.paquete")
Entonces el escaneo de componentes va a estar únicamente en el paquete que hemos indicado.
Definiendo un Bean mediante @Repository
Como ya hemos visto, podemos definir un @Bean mediante el uso de la anotación @Component, siempre que se encuentre bajo el alcance de @SpringBootApplication. Sin embargo, podemos usar una anotación más adecuada para definir el Bean. Estamos hablando de la anotación @Repository. Evidentemente, esta anotación la usaremos cuando queramos anotar una clase del tipo Repository.
@Repository
public class ProyectoRepositoryImpl implements IProyectoRepository {
//Métodos
}
La anotación @Repository, implementa ya la anotación @Component. Además, encaja mejor con nuestra situación en particular.
Como podemos ver, la clase Repository.class hace uso de la anotación @Component:

Si te gusta la informática, puedes oír noticias y nuestras opiniones en nuestro 👉 Podcast de informática Brecha Digital.
Deja una respuesta