web-dev-qa-db-fra.com

Utilisation de @ComponentScan ou <context: component-scan /> avec une seule classe

Je gère un projet avec deux ensembles de packages principaux, le projet utilise Spring et Spring MVC, l'un de ces packages contient plusieurs contrôleurs et est analysé à l'aide de la configuration XML (<context:component-scan />).

Le problème est qu'il y a une seule classe dans l'autre package (non scannée), et j'ai besoin que cette classe soit scannée, mais seulement cette classe et rien d'autre dans le package. Je ne peux pas changer son package maintenant car ce serait trop risqué maintenant.

Alors, existe-t-il un moyen de le faire en utilisant annotations ou XML?

26
Shadi

Ajoutez simplement un haricot à votre contexte, par ex.

<bean class="my.package.MyClass" />
21
Bart

Ce que @Bart a dit pour XML.

Si vous devez extraire cette classe à l'aide d'annotations, ajoutez ce qui suit à l'un de vos @Configuration Des classes

@ComponentScan(
    basePackageClasses = YourClass.class, 
    useDefaultFilters = false,
    includeFilters = {
        @ComponentScan.Filter(type = ASSIGNABLE_TYPE, value = YourClass.class)
    })
54
Emerson Farrugia

En plus de la méthode décrite par Emerson Farrugia, il existe une solution moins détaillée qui est prise en charge depuis Spring Framework 4.2 comme mentionné dans la documentation ici .

Depuis Spring Framework 4.2, @Import prend également en charge les références des classes de composants régulières, analogues à AnnotationConfigApplicationContext.register méthode. Ceci est particulièrement utile si vous souhaitez éviter l'analyse des composants, en utilisant quelques classes de configuration comme points d'entrée pour définir explicitement tous vos composants.

Votre exemple deviendrait donc simplement:

@Import(YourClass.class)
2
Robert Hunt