web-dev-qa-db-fra.com

Différence entre @EntityScan et @ComponentScan

J'essaie de comprendre la différence ici. Je vois qu'une classe a été annotée avec les deux avec le même exemple de package:

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

}

Je comprends les différences par rapport à la documentation API, mais je veux comprendre en détail. Cela signifie-t-il également que tout ce qui est analysé par @ComponentScan a une visibilité plus large par rapport au contexte Spring et @EntityScan ne fait pas. Si oui, utiliser un attribut avec @ComponentScan aurait dû suffire à la nécessité de lier dans un contexte d'APP, n'est-ce pas?

40
Raghuveer

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

Le @EntityScan En revanche ne crée pas de haricots pour autant que je sache. Il identifie uniquement les classes qui doivent être utilisées par un contexte de persistance spécifique. Depuis le démarrage de Spring 1.4, cela inclut JPA, MongoDB, neo4j, Cassandra et CouchBase.

Pourquoi ne sont-ils pas fusionnés? Eh bien, je ne fais pas partie de l’équipe de Spring, mais comme ils ont des significations différentes, pourquoi devraient-ils être fusionnés? Le @EntityScan Devrait principalement être utilisé pour analyser vos packages d'entités, tandis que le @ComponentScan Devrait analyser tous les packages contenant des beans Spring. Il est donc très probable que:

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

}
43
g00glen00b