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 :

Initialisation à l'utilisation et non à l'injection [Framework]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut Initialisation à l'utilisation et non à l'injection
    Bonjour,

    J'ai actuellement un problème de dépendance cyclique en passant mes objets dans Spring.

    En fait, avec les dépendances en chaînes, les objets en initialisent d'autres qui dépendent des premiers et c'est le crash

    J'ai déja trouvé comment résoudre mon problème, il faut que mes beans soient initialisés non pas à l'injection, mais à l'utilisation.

    Est-ce qu'il existe une manière de faire cela de base dans Spring ou est-ce qu'il faut que je crée un nouveau factory bean qui n'initialisera l'instance que lors de la première utilisation et non pas directement ?

    Ce que j'aimerais donc, c'est quelque chose comme les proxy hibernate pour les listes lazy-loadées qui chargent les données que lorsque l'on demande le contenu de la liste.

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Grooooooooooo c'est pas beau c'est pas bien ça

    Bon en attendant de mettre un peu d'ordre, peut être 3.3.4. Lazily-instantiated beans marchera-t-il ?

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut


    Ca je fais déja, tous mes beans sont en lazy-init par défaut, mais j'aimerais qu'ils soient initialisés à l'utilisation et non à l'injection comme avec lazy-init=true

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je ne comprends pas très bien... s'ils sont en lazy-init alors ils ne devraient être créés qu'a l'usage... ou alors ce sont des singletons ? ou alors ils sont en dépendance d'un singleton ? Es-tu sûr qu'il n'y a pas un usage ?

  5. #5
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Les beans de scope="prototype" sont unitialisé à l'utilisation, contrairement au singleton.

    Tu as quoi comme dépendances qui foirent ?
    Tu sais nous faire un petit topo ? :]
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  6. #6
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Les beans de type prototype, ça veut dire qu'il y en a qui sont créé à chaque utilisation, c'est juste, non ?

    Ce sont effectivement des singletons pour la plupart.

    Je vais essayer de donner un exemple :

    On a la classe Test1 qui est un bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Test1 {
         @Resource
         private IMainView mainView;
     
         public void build(){
              mainView.doSomething();
         }
    }
    et la classe MainView qui est également un bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class MainView implements IMainView{
         ...
    }
    Ce que j'aimerais ce que MainView ne soit pas initialisée lorsqu'elle est injectée dans Test1, mais seulement lorsqu'elle est utilisée dans Test1, c'est à dire à la ligne mainView.doSomething();

    Est-ce que c'est plus clair ?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/01/2009, 18h24
  2. Initialisation d'une DLL non mfc
    Par miwarrior dans le forum MFC
    Réponses: 4
    Dernier message: 14/05/2008, 01h07
  3. [UML] utilisation langage non objet
    Par untipy dans le forum UML
    Réponses: 5
    Dernier message: 10/08/2007, 16h30
  4. [2.0] Utiliser ou non un dataset
    Par Haks dans le forum Accès aux données
    Réponses: 3
    Dernier message: 08/11/2006, 23h09

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