web-dev-qa-db-fra.com

@Import vs @ContextConfiguration au printemps

Y a-t-il une différence dans l'utilisation des annotations? Les deux annotations permettent d'utiliser plusieurs @Configuration classes pour créer un ApplicationContext. De leurs documents @ContextConfiguration semble plus adapté à la configuration des tests et provient d'un artefact pour les tests (spring-test), cependant, je n'ai pas trouvé la différence réelle.

Merci pour toute réflexion!

13
Dmitry Senkovich

@Import et @ContextConfiguration sont pour différents cas d'utilisation et ne peuvent pas être utilisés pour l'interchangeabilité.

Le @Import n'est utile que pour importer d'autres @Configuration fichiers et n'est utile (et afaik) et fonctionnel que sur @Configuration Des classes. Lors de la mise du @Import sur une classe de test ce ne sera pas bon car il ne sera pas traité.

@Configuration
@Import(PersistenceConfig.class)
public class MainConfig {}

En utilisant @Import peut être utile si, par exemple, vous avez désactivé l'analyse des composants pour @Configuration cours ou vous avez besoin d'un @Configuration classe à partir d'un package non couvert par votre analyse de composants.

Remarque: Il existe également @ImportResource qui fait de même pour les anciens fichiers de configuration basés sur XML.

L'inverse est valable pour @ContextConfiguration car cela n'est utile que sur les classes de test basées sur Spring (les tests ont été exécutés avec le SpringRunner pour jUnit 4). Il est utilisé pour fournir au test les paramètres de configuration pour constituer la configuration de test. Il peut s'agir d'une collection de XML, javaconfig (ou une combinaison de ceux-ci).

@RunWith(SpringRunner.class)
@ContextConfiguration( {MainConfig.class, TestConfig.class})
public MyTest {}

Il permet également de spécifier quoi utiliser pour charger ces configurations (entre autres).

7
M. Deinum