spring-boot - example - spring boot annotations
Diferencia entre @EntityScan y @ComponentScan (2)
Estoy tratando de entender la diferencia aquí. Veo que una clase ha sido anotada con ambos con el mismo ejemplo de paquete:
@Configuration
@EntityScan("some.known.persistence")
@ComponentScan({ "some.known.persistence"})
public class ApiConfig {
}
Entiendo las diferencias de los documentos API, pero quiero entender en detalle. También significa que todo lo que se @ComponentScan
con @ComponentScan
tiene una mayor visibilidad en el contexto Spring y que no lo hace @EntityScan
. Si es así, el uso de algún atributo con @ComponentScan
debería haber bastado con la necesidad de enlazar en un contexto JPA, ¿no es así?
La anotación @ComponentScan
se utiliza para crear beans automáticamente para cada clase anotada con @Component
, @Service
, @Controller
, @RestController
, @Repository
, ... y los agrega al contenedor Spring (permitiéndoles estar @Autowired
).
El @EntityScan
por otra parte no crea beans por lo que sé. Solo identifica qué clases deben ser utilizadas por un contexto de persistencia específico. Desde Spring boot 1.4 que incluye JPA, MongoDB, neo4j, Casscandra y CouchBase.
¿Por qué no se fusionan? Bueno, no soy un desarrollador, pero supongo que tienen diferentes significados, ¿por qué deberían hacerlo? El @EntityScan
debe @EntityScan
principalmente para escanear los paquetes de su entidad, mientras que el @ComponentScan
debe escanear todos los paquetes que contienen Spring beans, por lo que es muy probable que lo siguiente:
@ComponentScan("org.example.base")
@EntityScan("org.example.base.entities")
public class MyConfig {
}
@EntityScan
es una anotación obsoleta que se utiliza para identificar entidades JPA, es decir, clases persistentes, desde el punto de vista de la base de datos.
Utiliza @ComponentScan
para buscar componentes, desde un punto de vista de Spring, es decir, clases (también conocidas como Java Beans ) anotadas con @Component
, @Service
, @Repository
, @Controller
... Estos son componentes de Spring agregados al contenedor IoC .