49 votes

Différence entre @EntityScan et @ComponentScan

Je suis en train d'essayer 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 de l'API docs, mais veulent comprendre dans le détail. Aussi fait-il que tout ce qui est numérisé par @ComponentScan est d'avoir une plus grande visibilité wrt Printemps contexte et @EntityScan ne le sont pas. Si donc l'utilisation de certains attributs avec @ComponentScan devrait avoir suffi à la nécessité de lier dans une JPA contexte, n'est-ce pas?

66voto

g00glen00b Points 10383

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

L' @EntityScan sur l'autre main pour ne pas créer de haricots pour autant que je sais. Il identifie uniquement les classes qui doivent être utilisés par un contexte de persistance. Depuis le Printemps de démarrage 1.4 qui comprend JPA, MongoDB, neo4j, Casscandra et CouchBase.

Pourquoi ils ne sont pas fusionnées? Eh bien, je ne suis pas un développeur, mais j'imagine qu'ils ont des sens différents, alors pourquoi devraient-ils? L' @EntityScan devrait principalement être utilisé pour analyser votre entité paquets, tandis que l' @ComponentScan doit analyser tous les paquets qui contiennent des beans Spring, donc la suite est très probable:

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

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X