IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Probleme avec ApplicationContext [Framework]


Sujet :

Spring Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut Probleme avec ApplicationContext
    Bonsoir
    Je travaille avec Spring 3.0, j'ai déclaré quelques beans au niveau du context de l'application et à chaque fois que je veux les utiliser dans mes classes métiers je suis obligé de passer par les lignes suivante :

    ApplicationContext context = new ClassPathXmlApplicationContext(
    "SpringBeans.xml");
    MonBean monbean = (MonBean) context
    .getBean("Bean1");

    Est ce qu'il y'a un moyen de faire la chose plus proprement ! Sans avoir à créer à chaque fois des instances de "ApplicationContext" avant d'en extraire les beans ?!

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    oui, ajoutez vos classe métier à Spring, faites les instancier par spring et fait la liaison dans Spring.

    Le but de spring est justement de relier vos beans entre eux.

    En plus, créer un contexte à chaque fois, ca veux dire que vos beans sont sur des contextes différents et ne pourront jamais vraiment être reliés entre eux.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    J'ai instancié mes classe via Spring mais le problème ce pose quand je dois utiliser ces instances puisque pour les récupérer je dois passer par les 2 lignes de codes que j'ai cité là haut (chose que je veux éviter) ! Je me demandais si cette récupération pouvait se faire autrement

  4. #4
    Membre émérite

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Par défaut
    Citation Envoyé par samisum41 Voir le message
    J'ai instancié mes classe via Spring mais le problème ce pose quand je dois utiliser ces instances puisque pour les récupérer je dois passer par les 2 lignes de codes que j'ai cité là haut (chose que je veux éviter) ! Je me demandais si cette récupération pouvait se faire autrement
    Il faut bien quelque part indiquer à Spring où chercher sa configuration... par exemple, pour un appli lancée en ligne de commande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /**
    * Classe qui initialise l'application Spring.
    */
    public class SpringApplication {
      public static void main(String[] args) {
     
       // Demarre le contexte de Spring
       ApplicationContext context = new ClassPathXmlApplicationContext("SpringBeans.xml", SpringApplication.class);
      }
     
      // Faire le lien entre le contexte et l'un des beans
      MainBeanImpl app= (MainBeanImpl) context.getBean("mainBean");
    app.start(); 
      ...
    }
    Il faudra placer ton SpringBeans.xml dans le même package que ta classe SpringApplication... Au lancement de ton appli:
    - la configuration sera chargée et tes beans instanciés par Spring.
    - l'instance du bean principal sera retouvée; et, l'une des methodes (ici start()) de ta classe associée (ici MaiBeanImpl) sera appelée (note: tu peux aussi indiquer l'exécution de ta méthode start depuis la configuration de ton bean).
    - ensuite comme te l'a indiqué tchize_ si tes beans sont liés entre eux tu n'auras plus besoin de faire des getBean...

    C'est l'une des soluces parmis d'autres... Dans tous les cas, ton contexte doit être chargé une seule-fois... ce bout de code, est donc à placer dans l'init de ton appli !

    Note: si un bout de ton code n'est pas lié à un bean tu pourras quand même accéder à tes beans. Pour cela, tu pourras insérer la classe utilitaire suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class SpringBeanProvider implements ApplicationContextAware {
      private static ApplicationContext springContext = null;
      public void setApplicationContext(ApplicationContext ctx) throws BeansException {
        springContext = ctx;
      }
       public static ApplicationContext getSpringContext() {
        return springContext;
      }
      /**
       * Method (shortcut) to retrieve a bean from Spring context.
       * 
       * @param beanName
       *          Name of the bean in the context
       * @return an object. Or <code>null</code> value if the named bean is not
       *         found in the Spring context.
         */
      public static Object getBean(String beanName) {
        if (springContext != null) {
          return springContext.getBean(beanName);
        }
        return null;
      }
    }
    et, insérer dans ton code

    toto = SpringBeanProvider.getBean("monBean");
    toto.fairequelquechose();

    a+
    Philippe

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 27
    Par défaut
    Merci bien Philippe c'est clair maintenant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo