Débutant Spring qui aurait besoin de conseils

Résolu
tedoldi Messages postés 5 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 25 mars 2009 - 15 mars 2009 à 03:06
roidestenebres Messages postés 10 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 9 juin 2009 - 6 juin 2009 à 20:01
Bonjour,

je suis débutant avec le framework Spring et je commence mon premier projet pour m'entrainer.
Je me suis déjà documenté par le livre "Spring par la pratique" aux éditions eyrolles.

Malgré cela, je suis déjà confronté à un problème dont je n'ai vu aucune réponse ni dans mon libre, ni sur internet.
Le voici :

Je suis en train de faire un mini outlook.
J'ai une classe Account qui contient un attribut accountService qui contient une méthode (entre autres) qui permet de se connecter.
J'ai deux types d'implémentation de ce service AccountServiceImap qui se connecte par le protocole IMAP et AccountServicePOP pour le protocole POP.

alors, voilà. normalement, je souhaiterai injecter mon service à la classe Account. Mais le souci, c'est que c'est l'utilisateur, lors de la création du compte qui va définir le protocole.
Or, dans le fichier applicationContext.xml de Spring, lorsque je définis mes beans :





      

Comment je peux faire pour dynamiquement choisir l'un ou l'autre en fonction d'un paramètre ?
A moins que ce ne soit pas la bonne manière de voir les choses. Dans ce cas, comment concevoir avec Spring un cas ce de type ?

Je vous remercie.

3 réponses

tedoldi Messages postés 5 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 25 mars 2009
25 mars 2009 à 15:36
Merci benmor,

j'avais pensé à ta méthode mais elle ne me plaisait pas étant donné que je ne souhaitais pas créer de prototypes de mes AccountService mais plutôt faire la bonne redirection sur le bon singleton.

J'ai résolu mon problème plutôt grâce à l'interface ApplicationContextAware de Spring.
Et c'est au travers du contexte que je récupère le bon objet IMAP ou POP.
Voilà l'exemple :
/* l'interface service qui va permettre de connecter un compte */
interface IAccountService {
      public connect(Account account);
}

/* la classe qui va jouer le role de rediriger vers le bon service POP ou IMAP */
public class RouteurAccountService implements ApplicationContextAware
{
public IAccountService getAccountService(String protocol) {
        return (IAccountService)context.getBean("accountService"+protocol);
}
}
Dans mon Fichier applicationContext.xml, j'ai deux beans :
   
       
   
   
et le routeur :
   

Et pour implémenter la connexion d'un compte POP ou IMAP
Class MyClass extends JFrame {

// injection du routeur
RouteurAccountService routeur;

public setService (RouteurAccountService routeur) {
     this.routeur = routeur;
}

public actionConnection {
        Account account = new Account();
        account.set..... = textfield....getText(); // récupération des paramètres utilisateurs
        routeur.getAccountService(textFieldProtocol.getText()).connect(account);
}

Voilà, je trouve ce système plus classe que par le bean fabrique. Du coup, AccountServicePOP et AccountServiceIMAP ne sont pas des prototypes et sont déclarés direct dans le context.xml.

Merci pour ton aide.
3
benmor Messages postés 49 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 27 novembre 2011 9
15 mars 2009 à 08:44
Bonjour,

Tu peux, peut-être, utiliser la fonctionnalité "factory" ?

Cependant, à toi de voir comment informer la factory pour qu'elle sache qu'elle implémentation instancier. L'attribut "factory-bean" peut aussi t'aider dans cette voie.

(attention, je suis pas un expert Spring :P)
0
roidestenebres Messages postés 10 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 9 juin 2009
6 juin 2009 à 20:01
  sllttt  , je suis un etudiant en genie informatique, je travaille sur le meme projet ,et j'ai pas mal de bug  dans mes codes , alors si possibles envoi  moi tes classe par email   et  merciiiiiiiiiiiiiiiiiiiiiiiii   d'avance   
                        brahimge_2020@hotmail.com

                  
                                                                                                                                                                 meerrcii
                          

jeune developpeur  
0
Rejoignez-nous