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 :

injection d'une propriete d'un bean


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut injection d'une propriete d'un bean
    Bonjour tlm,

    Je voudrais savoir s'il est possible et comment faire pour injecter la valeur d'une proprieté d'un bean dans une autre d'un autre bean ?
    Je sais pas si je suis clair .
    Par exemple:
    J'ai un bean MonBean qui a une proprieté maProp en lecture seule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    package monPackage;
    public class MonBean {
        public MonBean() {
        }
        public String getMaProp() {
            return "valeur de ma prop";
        }
    }
    Dans le fichier de config de spring, je declare monBean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <bean id="monBean" class="monPackage.MonBean"/>
    Mais apres j'ai besoin d'injecter la valeur de monBean.getMaProp dans un la proprieté propName d'autre bean.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <bean id="autreBean" class="blabla.AutreBeanClassNonModifiable">   
       <property name="propName" value="monBean.maProp"/>
    </bean>
    J'ai essayé avec <ref> <local> ... mais a chaque fois ca injecte l'objet et non juste la proprieté.
    Je pense qu'une telle injection est on ne peut plus simple mais pourquoi est-ce si compliqué a realiser

    Merci de votre aide.

    Salutations.

  2. #2
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Honnêtement je vois pas le use-case de ton probleme, je pense que tu peux toujours créer un bean mais enfin il y a http://static.springframework.org/sp...ctoryBean.html
    qui rêgle ton problem. Il y a un exemple d'utilisation dans la doc.

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut
    Bonjour Zekey,

    Je vais expliquer un peu le use case.
    On a un plugin qui charge la configuration de l'appli (db, ldap, log4j, mailserver, ......) a partir d'un fichier se trouvant dans catalinahome/conf (ou ailleurs suivant le webcontainer), si ce fichier n'est pas present le plugin charge un fichier par defaut se trouvant dans le war contenant une config par defaut.
    Ainsi lorsque l'on deploie une nouvelle version on pose le war et ca marche.

    Enfin ca marchait mais maintenant on utilise spring et la config hibernate se trouve dans le action-servlet.xml (on utilise struts).
    Du coup quand on deploie faut modifier ce fichier avant, donc bof bof la regression.

    Sachant que on ne modifiera pas la facon de charger la config (plugins + xml conf local), comment faire pour que spring charge les valeurs de la config hibernate (datasource (url, user, pass) + sessionfactory (showsql, dialect, fetchdepth, ...)) depuis le plugin.
    Pour acceder au valeurs du plugins on utilise 'Environment.getInstance().getProperty('scopeName', 'propertyName')'.
    Je ne pense pas que ca marche dans spring, donc j'avais pensé a utiliser un bean EnvironmentReader dont les properties fassent un 'return Environment.getInstance().getProperty('scopeName', 'propertyName')'.
    Mais apres comment ecrire le action-servlet.xml pour acceder a ces proprietes ?

    Merci.

    Salutations.

  4. #4
    Membre Expert
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Par défaut
    Hola je trouve tout ca très compliqué. Peut être que c'est normal mais là de but en blanc (et sans l'avoir testé) je dirais dans
    CATALINA_HOME/conf/monApp.xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <Context ...>
      ...
      <Environment name="maxExemptions" value="10"
             type="java.lang.Integer" override="false"/>
      ...
    </Context>
    Ce qui va crée une entrée jndi. Tu trouvera plein de tutoriel sur comment utilisé une config jndi dans spring et comment l'injectée.

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut
    Merci mais j'ai pas envie de me lancer dans un truc usine a gaz.

    J'ai créé 2 classes ki etendent respectivement de org.apache.commons.dbcp.BasicDataSource et org.springframework.orm.hibernate3.LocalSessionFactoryBean
    , dans chaque constructeur je fais un super() et je set les properties par celles de l'environement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class DataSource extends org.apache.commons.dbcp.BasicDataSource {
        public DataSource() {
            super();
            this.setDriverClassName(Environment.getInstance().getProperty("hibernate", "connection.driverClassName"));
            this.setUrl(Environment.getInstance().getProperty("hibernate", "connection.url"));
            this.setUsername(Environment.getInstance().getProperty("hibernate", "connection.username"));
            this.setPassword(Environment.getInstance().getProperty("hibernate", "connection.password"));
        }        
    }
    C'est ptet pas super mais au moins ca marche nickel et ca reste simple donc facile a maintenir.
    Et puis c pas tous les jours k'on change une implementation

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/02/2009, 18h19
  2. [POO] [PHP 4.4.X] Nom d'une propriété de classe
    Par stailer dans le forum Langage
    Réponses: 8
    Dernier message: 11/12/2005, 23h02
  3. [VB.NET] une chaine de caractère qui devient une propriete
    Par lucie.houel dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/09/2005, 14h10
  4. [Struts] Recuper une référence d'un bean session
    Par nicoo dans le forum Struts 1
    Réponses: 6
    Dernier message: 07/09/2005, 14h26
  5. [scriplet] affecter une valeur par un bean:write
    Par viena dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/11/2004, 16h29

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