Spring @Configuration et & lt; context: component-scan / & gt;
J'ai un scénario la configuration de la Sécurité Printemps sur Jetty embarqué qui semble être un peu résolu si j'utilise JavaConfig pour configurer le serveur Jetty.
Comme un résultat, il est à la recherche comme JavaConfig plutôt que de XML peut être la meilleure option pour les gros morceaux du projet. Cependant, il y a quelques subtilités dans les espaces de noms XML, comme <context:component-scan />
qui ne sont pas facilement disponibles dans un @Configuration
réglage.
J'ai découvert que ApplicationContextAware
est à l'honneur pour @Configuration
classes, donc la suite est possible
@Configuration
public class FooConfig implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
((AnnotationConfigApplicationContext) applicationContext).scan("org.example");
}
}
L'alternative, qui est documentéc'est d'avoir le @Configuration
classe utiliser un @ImportResource
d'annotation et de tirer dans un fichier XML existant:
@Configuration
@ImportResource("applicationContext-withComponentScan.xml")
public class BarConfig {}
Je suppose que la question est "Est-ce la mauvaise forme de l'abus de ApplicationContextAware
de cette façon, ou est-il vraiment pas d'abus"? Quelque chose ne se sent bizarrement sale à propos de l'approche, donc je ne vais pas être surpris si le Printemps gars l'avait recouvert d'une certaine façon ou d'une autre que je n'ai pas repéré.
Pour les intéressés, le problème est lié à la numérisation d'un Maillot de l'installation avec @Resource
et @Provider
classes que je préfère ne pas avoir à gérer manuellement les entrées dans une classe/XML de configuration.
source d'informationauteur ptomli
Vous devez vous connecter pour publier un commentaire.
Oui, c'est mauvais. Si vous allez chercher les choses hors du contexte manuellement, vous pouvez aussi bien ne pas s'embêter avec l'injection de dépendance dans la première place.
Cependant, votre deuxième option (
@ImportResource("applicationContext-withComponentScan.xml")
) est un bon one - c'est actuellement la meilleure pratique lorsque vous souhaitez utiliser ces XML macros en combinaison avec l'annotation de style config.Une troisième option est d'utiliser l'actuelle étape de construction de Printemps 3.1, qui ajoute un moyen de le faire toutes ces choses en Javaà l'aide de
@Feature
. Ce n'est pas encore prêt pour la production.Maintenant que Printemps 3.1 est prêt et vous pouvez l'utiliser en toute sécurité @ComponentScan si vous êtes sur le Printemps 3.1. Ce n'est pas seulement pour Spring MVC comme l'un des obsolète réponses mentionne. Vous pouvez l'utiliser comme suit:
Voici la documentation http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/context/annotation/ComponentScan.html
Vérifier ce lien. Il est un peu plus spécifique (pour une application web), mais il a un très bel exemple de code pour la numérisation, en particulier: http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/web/servlet/config/annotation/EnableWebMvc.html
à partir de ce lien: