Différence entre @EntityScan et @ComponentScan

j'essaie de comprendre la différence ici. Je vois qu'une classe a été annoté avec deux d'entre eux avec le même exemple de forfait :

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

}

je comprends les différences avec API docs mais je veux les comprendre en détail. Cela signifie aussi que tout ce qui est scanné par @ComponentScan a une plus grande visibilité dans le contexte du printemps et @EntityScan ne fonctionne pas. Si donc, en utilisant un attribut @ComponentScan aurait dû suffire le besoin de lier dans un contexte JPA, n'est-ce pas?

27
demandé sur Mehraj Malik 2016-08-11 15:27:58

2 réponses

@ComponentScan annotation est utilisée pour créer automatiquement des haricots pour chaque classe annotée avec @Component, @Service,@Controller,@RestController,@Repository,... et les ajoute au conteneur à ressort (leur permettant d'être @Autowired).

@EntityScan d'un autre côté ne crée pas des haricots autant que je sache. Elle identifie uniquement les classes qui devraient être utilisées dans un contexte de persistance spécifique. Depuis la botte de printemps 1.4 qui comprend JPA, MongoDB, neo4j, Casscandra et CouchBase.

Pourquoi ils ne sont pas fusionnées? Je ne suis pas un développeur, mais je pense qu'ils ont des significations différentes, alors pourquoi le devraient-ils? @EntityScan devrait principalement être utilisé pour scanner vos paquets entity, alors que le @ComponentScan devrait balayer tous les paquets qui contiennent des haricots de printemps, de sorte que ce qui suit est très probable:

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

}
27
répondu g00glen00b 2016-08-11 12:44:10

@EntityScan est un deprecated annotation utilisée pour identifier les entités JPA, c.-à-d. Les classes persistantes, du point de vue de la base de données.

Vous utilisez @ComponentScan rechercher des composants, du point de vue du ressort, c'est-à-dire des classes(aussi connues sous le nom de Java Beans) annoté avec @Component, @Service,@Repository,@Controller... Il s'agit de composants de ressorts ajoutés au conteneur IoC.

7
répondu Arthur Noseda 2017-03-22 09:11:11