Comment faire pour remplacer le Printemps de service de haricots par nom, à l'aide d'annotations seulement
Donné que j'ai un Ressort de haricots configuré comme
@Service("myService")
public class DefaultService extends MyService {
}
et d'une classe à l'aide de ce bean
public class Consumer {
@Autowired
@Qualifier("myService")
private MyService service;
...
}
Maintenant, je veux que mon projet, qui comprend les précédentes classes, d'avoir Consumer
une autre mise en œuvre de MyService
être injecté. Donc je voudrais remplacer la fève myService
@Service("myService")
public class SpecializedService implements MyService {
}
résultant dans Consumer
portant maintenant une instance de SpecializedService
au lieu de DefaultService
. Par définition, je ne peut pas avoir deux haricots avec le même nom dans le Printemps conteneur. Comment puis-je dire de printemps, que la définition de ce nouveau service doit remplacer l'ancienne? Je ne veux pas modifier le Consumer
classe.
OriginalL'auteur Lars Blumberg | 2011-04-07
Vous devez vous connecter pour publier un commentaire.
Soit de définir le service de haricots explicitement
ou component-scan.
Dans les deux cas, dans votre contexte de l'application, éviter de définir explicitement DefaultService et éviter composant de balayage.
OriginalL'auteur Willie Wheeler
De l'exclure de l'component-scan à l'aide d'un filtre
Vous ne savez pas si il existe un moyen de le faire avec des annotations (autres que de supprimer l'annotation @Service de DefaultService).
OriginalL'auteur Wilhelm Kleu
Annotation en fonction de câblage qui se passe avant le XML de configuration, ce qui signifie des haricots défini en XML
remplacer ces câblage effectué par les Annotations.
Afin de définir explicitement dans XML, comme Willie a dit va faire le travail
Printemps recommande l'utilisation de XML pour le service et le référentiel de haricots et d'annotation de MVC haricots. Il recommande également de @Autocâblés sans composant de balayage. Mais les Annotations sont en général encouragée, même si elle se confond code et de configuration de l'ensemble (contre la séparation des préoccupations).
Deuxième chose, c'est d'utiliser @Qualificatifs("id de l'déclaré bean") où il est passé.
OriginalL'auteur vimal krishna
Je sais pas , sa fin . Encore poster.
Vous devriez avoir des noms différents pour les différentes implémentations de MyService.
Par exemple
Tout permettra à l'autowiring ( mot à dire dans le Contrôleur) , vous pouvez utiliser le caractère @Qualifier pour injecter souhaité la mise en œuvre comme indiqué ci-dessous.
Pour obtenir défaut de mise en œuvre
À se spécialiser de la mise en œuvre
Pourriez-vous svp partager votre approche .. ?
J'aurais défini de nouveaux bean-dessus de l'autre dans un autre fichier de configuration xml (ou java), et il faut remplacer la précédente, ou seraient allés de l'avant avec le Printemps, les Profils ou @Conditionnelle.
OriginalL'auteur Gyro