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 :

Définir des beans configurables par l'application [Framework]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Définir des beans configurables par l'application
    Bonjour,

    je cherche, pour des raisons de cohérence, à faire rentrer ce bout de code sous forme d'une définition Spring:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	@Override
    	public <CP extends AbstractControlPoint<?, ?>, N extends AbstractCurve<?, ?>> Operation[] getOperations(
    			N element, CP controlPoint, AnimationModel model, SVGController controller) {
    		java.util.List<Operation> operations = new ArrayList<Operation>();
    		operations.add(new FrontAddControlPoint((FrontCurve)element, (FrontControlPoint) controlPoint, controller));
    		operations.add(new FrontDeleteFront((FrontCurve)element, model));
     
    		operations.add(new FrontCycleCurveType((FrontCurve)element, model, true));
    		operations.add(new FrontCycleCurveType((FrontCurve)element, model, false));
    		operations.add(new FrontSwitchCurveSide((FrontCurve)element, model));
    		return operations.toArray(new Operation[operations.size()]);
    	}
    L'idée étant d'avoir à la fin un truc du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	@Override
    	public <CP extends AbstractControlPoint<?, ?>, N extends AbstractCurve<?, ?>> Collection<Operation> getOperations(
    			N element, CP controlPoint, AnimationModel model, SVGController controller) {
       return applicationContext.getBeans("frontOperations");
    )
    et avoir un truc dans le xml du style:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <util:list id="frontOperations" scope="prototype">
      <bean class="bla.bla.FrontAddControlPoint" element="${curve}" controlPoint="${point}" controller="{controller}"/>
      <bean class="bla.bla.FrontDeleteFront" element="${curve}" model="#{model}"/>
      <bean class="bla.bla.FrontCycleCurveType" element="${curve}" model="#{model}" up="true"/>
      <bean class="bla.bla.FrontCycleCurveType" element="${curve}" model="#{model}" up="down"/>
    </util:list>

    Evidement, ce n'est pas valable en l'état. Donc la question que je me pose, comment donne à spring des paramètres dynamique, c'est à dire des bean, non gérés par spring, à injecter dans l'appel en cours à applicationContext.getBean?

    Merci

  2. #2
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Salut.
    D'après mes connaissances, il n'est pas possible de réaliser cela via la configuration dans le fichier applicationContext.
    Spring ne gère pas cet aspect là.

  3. #3
    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
    Ha, j'avais oublié ce ticket. J'ai finalement résolut mon problème. J'ai créé un bean appelé "dynamic", qui se comporte comme un Map et contient un ThreadLocal avec les données en cours.

    J'injecte ce dynamic dans ma classe, j'appelle dessus setValue(key,value) plusieurs fois, avant de récupérer mon prototype dans l'applicationContext qui ressemble maintenant à ça (de mémoire, je suis en congé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <util:list id="frontOperations" scope="prototype">
      <bean class="bla.bla.FrontAddControlPoint" element="${dynamic['curve']}" controlPoint="${dynamic['point']}" controller="{controller}"/>
      <bean class="bla.bla.FrontDeleteFront" element="${dynamic['curve']}" controlPoint="${dynamic['point']}" controller="{controller}"/>
      <bean class="bla.bla.FrontCycleCurveType" element="${dynamic['curve']}" model="${dynamic['model']}" up="true"/>
      <bean class="bla.bla.FrontCycleCurveType" element="${dynamic['curve']}" model="${dynamic['model']}" up="down"/>
    </util:list>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	@Override
    	public <CP extends AbstractControlPoint<?, ?>, N extends AbstractCurve<?, ?>> Collection<Operation> getOperations(
    			N element, CP controlPoint, AnimationModel model, SVGController controller) {
       try{
          dynamic.set("curve",element);
          dynamic.set("model",model);
          dynamic.set("point",controlPoint);
          return applicationContext.getBeans("frontOperations");
       } finally {
          dynamic.clean();
       }
    )
    C'est pas parfait, mais ça fait ce que je veux à bas coût: permettre de configurer les différentes actions possible dans un fichier séparé du code.

  4. #4
    Membre très actif
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Billets dans le blog
    1
    Par défaut
    Salut tchize,
    que pense tu de l'idée d'utiliser un template engine, pour générer un conf.groovy nourri par une ressource json, xml, n'importe quoi qui est fait pour transporter des données.
    Ce qui m'a fait arriver a penser que j'aimerais avoir la possibilité d'initialiser le conteneur spring avec une structure de données basique en mode programmation fonctionnel.

  5. #5
    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
    Citation Envoyé par Khaled.Noordin Voir le message
    Salut tchize,
    que pense tu de l'idée d'utiliser un template engine, pour générer un conf.groovy nourri par une ressource json, xml, n'importe quoi qui est fait pour transporter des données.
    Je pense que je vois pas ce que je ferais de ce conf.groovy (non obstant le fait que groovy n'a rien à faire dans le programme concerné )

  6. #6
    Membre très actif
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Billets dans le blog
    1
    Par défaut
    Ce fichier groovy tu pourrais t'en servir avec un GroovyBeanDefinitionReader.
    Sachant que groovy permet des manipulations de structure plus simple que en java, voila ce que groovy viendrait faire.
    Je me suis permit de venir dans le fil et poser une "solution" que je pense être bonne, afin de la confronter à ton avis.

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

Discussions similaires

  1. Probleme avec des logs générés par une application
    Par yayamo dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/04/2008, 14h41
  2. Définir les droits des fichiers créés par Azureus
    Par sir_gcc dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 20/05/2007, 14h00
  3. Affichage des images générées par une application sous tomcat
    Par don'de dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 09/01/2007, 11h24
  4. Réponses: 7
    Dernier message: 24/08/2006, 12h21
  5. [JSP] Usebean : configuration des beans
    Par faroun dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/05/2006, 09h14

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