Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    262

    [Spring] - resolve bean at runtime

    Hy,
    I use Spring 2.5 and I have a web-app with some context file. I have a bean like this:

    <bean id="service" class="...">
    <property name="nameProp" ref="policy_1" />
    </bean>

    I'd like to change the policy_1 in policy_2 in my GUI by web-app and store the value (DB or properties), not restart the web-app and I want the web-app to work in this configuration:

    <bean id="service" class="...">
    <property name="nameProp" ref="policy_2" />
    </bean>



    My idea is PropertyPlaceholderConfigurer explicited in ref but I don't know if it is a working solution.

    Thanks

  2. #2

    Re: [Spring] - resolve bean at runtime

    Originariamente inviato da iperuber
    ...
    not restart the web-app
    ...
    I suppose you should also restart the web app using PropertyPlaceholderConfigurer.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    262

    Re: Re: [Spring] - resolve bean at runtime

    Originariamente inviato da satifal
    I suppose you should also restart the web app using PropertyPlaceholderConfigurer.
    This was my doubt. Any solution for not restarting the web-app?


    Possiamo continuare anche in italiano ... avevo incollato il post da un forum straniero e non mi andava di riscrivere tutto in italiano

  4. #4
    Ahh ecco, volevi fare lo sborone internazionale scherzo!

    Comunque tornando al tuo problema, per quanto ne so i bean vengono caricati nell'ApplicationContext all'avvio di Spring, ma devo rivedere un po' di documentazione al riguardo.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    262
    Originariamente inviato da satifal
    Ahh ecco, volevi fare lo sborone internazionale scherzo!

    Comunque tornando al tuo problema, per quanto ne so i bean vengono caricati nell'ApplicationContext all'avvio di Spring, ma devo rivedere un po' di documentazione al riguardo.


    Io ho pensato anche di salvare nel DB il classname e tramite reflection richiamare il metodo corretto ...

    (i metodi si chimano lo stessi, sono overridati)

    AbstractClass
    class_1 extends AbstractClass
    class_1 extends class_1

  6. #6

    Re: [Spring] - resolve bean at runtime

    Originariamente inviato da iperuber
    Hy,
    I use Spring 2.5 and I have a web-app with some context file. I have a bean like this:

    <bean id="service" class="...">
    <property name="nameProp" ref="policy_1" />
    </bean>

    I'd like to change the policy_1 in policy_2 in my GUI by web-app and store the value (DB or properties), not restart the web-app and I want the web-app to work in this configuration:

    <bean id="service" class="...">
    <property name="nameProp" ref="policy_2" />
    </bean>



    My idea is PropertyPlaceholderConfigurer explicited in ref but I don't know if it is a working solution.

    Thanks
    Ciao, fammi capire bene, tu hai un certo bean (service) caricato dal contesto di spring cui passi come parametro in caricamento la reference ad un altro bean (policy_1) da settare nel suo field nameProp . Quello che vuoi ottenere è a runtime, senza riavviare, cambiare il valore del field nameProp nell'oggetto oppure proprio cambiare fisicamente il file di configurazione di spring?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    262

    Re: Re: [Spring] - resolve bean at runtime

    Originariamente inviato da unomichisiada
    Ciao, fammi capire bene, tu hai un certo bean (service) caricato dal contesto di spring cui passi come parametro in caricamento la reference ad un altro bean (policy_1) da settare nel suo field nameProp . Quello che vuoi ottenere è a runtime senza riavviare cambiare il valore del field nameProp nell'oggetto oppure proprio cambiare fisicamente il file di configurazione di spring?

    cambiare il file di configurazione no ... per quello pensavo al placeholders ma a quanto pare non mi risolve il problema perchè una volta caricato spring, rimane quello. Al momento stavo pensando al pattern strategy e stavo facendo un tentativo (salvare il valore selezionato nella combo nel db e nella strategy leggere il valore attuale ed invocare la classe corretta ... non sò se funzica ... )

    Sostanzialmente non devo sovrascrivere i file xml, devo solo modificare a runtime il comportamento della web-app

  8. #8

    Re: Re: Re: [Spring] - resolve bean at runtime

    Scusami, ma allora puoi semplicemente ottenere il bean service a partire dall'application contex con una cosa del tipo
    codice:
    getApplicationContext().getBean("service")
    fare lo stesso con il bean "policiy_2" e successivamente effettuare il set dell'uno sull'altro "a mano"

    Originariamente inviato da iperuber
    cambiare il file di configurazione no ... per quello pensavo al placeholders ma a quanto pare non mi risolve il problema perchè una volta caricato spring, rimane quello. Al momento stavo pensando al pattern strategy e stavo facendo un tentativo (salvare il valore selezionato nella combo nel db e nella strategy leggere il valore attuale ed invocare la classe corretta ... non sò se funzica ... )

    Sostanzialmente non devo sovrascrivere i file xml, devo solo modificare a runtime il comportamento della web-app
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    262
    si, infatti quello che sto facendo è, dopo un refactoring delle classi, avere qualcosa del tipo:

    AbstractClassePadre {
    public metodo(){
    valore = repositoryConfig.readActualPropertyFromDB(...);
    if (valore instanceof A) {
    A a = getApplContext.getBean("policy_1");
    a.metodo();
    } else if (valore instanceof B) {
    B b = getApplContext.getBean("policy_2");
    b.metodo();
    }
    }

    class A extends AbstractClassePadre {
    @override
    metodo(){...};
    }

    class B extends AbstractClassePadre {
    @override
    metodo(){...};
    }


    come la vedi?

  10. #10
    Uhm...forse mi sfugge qualcosa dei vincoli che hai e del contesto in cui lavori, ma se l'obiettivo è ottenere che il tuo bean "service" si comporti in modi diversi a seconda di una discriminante su db non mi sembra un approccio molto pulito.Magari funziona ma stai forzando le cose. A questo punto, se ho capito bene e se non ci sono altri impedimenti (che non avendo il quadro completo non posso conoscere) io passerei al bean service le reference di entrambi i bean policy , evitando il subclassing (che in questo caso non ti serve come dimostra il fatto che poi fai un test sulle istanze) e sulla base di un flag letto da db chiamerei policy1.metodo() piuttosto che policy2.metodo() a seconda del valore del flag.

    Originariamente inviato da iperuber
    si, infatti quello che sto facendo è, dopo un refactoring delle classi, avere qualcosa del tipo:

    AbstractClassePadre {
    public metodo(){
    valore = repositoryConfig.readActualPropertyFromDB(...);
    if (valore instanceof A) {
    A a = getApplContext.getBean("policy_1");
    a.metodo();
    } else if (valore instanceof B) {
    B b = getApplContext.getBean("policy_2");
    b.metodo();
    }
    }

    class A extends AbstractClassePadre {
    @override
    metodo(){...};
    }

    class B extends AbstractClassePadre {
    @override
    metodo(){...};
    }


    come la vedi?
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.