2016-08-11 26 views
15

Próbuję zrozumieć różnicę tutaj. Widzę, że klasa została opatrzone oboje z samym przykładzie pakietu:Różnica między @EntityScan a @ComponentScan

@Configuration 
@EntityScan("some.known.persistence") 
@ComponentScan({ "some.known.persistence"}) 
public class ApiConfig { 

} 

rozumiem różnice z docs API, ale chce zrozumieć szczegółowo. Oznacza to również, że wszystko, co jest skanowane przez @ComponentScan, ma szerszą widoczność, a kontekst Spring i @EntityScan nie. Jeśli tak, używając jakiegoś atrybutu z @ComponentScan powinno wystarczyć konieczność wiązania w kontekście JPA, nieprawdaż?

+0

referencyjny: Wiosna Boot [org.springframework.boot.autoconfigure. domain.EntityScan] (http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/domain/EntityScan.html) i Spring [org.springframework.context.annotation. ComponentScan] (https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html) –

Odpowiedz

15

@ComponentScan adnotacji służy do automatycznego tworzenia ziarna dla każdej klasy, z dopiskiem @Component, @Service, @Controller, @RestController, @Repository ... i dodaje je do pojemnika sprężyna (pozwalając im być @Autowired).

Z drugiej strony @EntityScan nie tworzy fasoli, o ile wiem. Określa tylko, które klasy powinny być używane przez określony kontekst utrwalania. Od wiosny rozruchu 1.4, który obejmuje JPA, MongoDB, neo4j, Casscandra i CouchBase.

Dlaczego nie są połączone? Cóż, nie jestem programistą, ale domyślam się, że mają różne znaczenia, więc dlaczego mieliby to robić? @EntityScan powinny być przede wszystkim wykorzystywane do skanowania paczek podmiotu, natomiast @ComponentScan należy zeskanować wszystkie pakiety, które zawierają Wiosenne fasolę, więc bardzo prawdopodobne jest następujący:

@ComponentScan("org.example.base") 
@EntityScan("org.example.base.entities") 
public class MyConfig { 

} 
4

@EntityScan jest adnotacją uznaną za nieaktualną używaną do identyfikowania podmiotów JPA, tj. Klas trwałych, z punktu widzenia bazy danych.

użyć @ComponentScan aby szukać elementów, z punktu widzenia Wiosna, czyli zajęcia (znany również jako Java Beans) opatrzone @Component, @Service, @Repository, @Controller ... to elementy Wiosna dodane do MKOl pojemnik.

+20

'@ EntityScan' w swojej funkcjonalności nie jest zdecydowanie przestarzałe. Zmienili nazwę pakietu w Spring Boot 1.4 i zachowali starą adnotację ('org.springframework.boot.orm.jpa.EntityScan') jako Przestarzałą dla kompatybilności wstecznej. Kwalifikowana nazwa nowej adnotacji to 'org.springframework.boot.autoconfigure.domain.EntityScan'. – dunni

+0

To prawda! Dzięki. –