Puis-je remplacer un Ressort de haricots définition au moment de l'exécution?

Envisagez le scénario suivant. J'ai un Ressort de contexte de l'application avec un haricot dont les propriétés doivent être configurable, pense DataSource ou MailSender. La mutable configuration de l'application est gérée par un autre bean, nous allons l'appeler configuration.

Un administrateur peut maintenant modifier les valeurs de configuration, comme l'adresse email ou de la base de données URL, et je tiens à re-initialiser la configuration de la fève au moment de l'exécution.

Supposer que je ne peux pas tout simplement modifier la propriété de l'configurable bean ci-dessus (par exemple, créé par FactoryBean ou le constructeur de l'injection) mais pour recréer le bean lui-même.

Des idées sur comment faire? Je serais heureux de recevoir des conseils sur la façon d'organiser l'ensemble de la configuration chose. Rien n'est fixe. 🙂

MODIFIER

Pour clarifier un peu les choses: je ne demande pas comment faire pour mettre à jour la configuration ou comment injecter les valeurs de configuration statique. Je vais essayer un exemple:

<beans>
    <util:map id="configuration">
        <!-- initial configuration -->
    </util:map>

    <bean id="constructorInjectedBean" class="Foo">
        <constructor-arg value="#{configuration['foobar']}" />
    </bean>

    <bean id="configurationService" class="ConfigurationService">
        <property name="configuration" ref="configuration" />
    </bean>
</beans>

Donc, il y a un haricot constructorInjectedBean qui utilise le constructeur de l'injection. Imaginez la construction de la fève est très cher, donc à l'aide d'un prototype de portée ou d'une usine de proxy n'est pas une option, pensez à DataSource.

Ce que je veux faire, c'est que chaque fois que la configuration est en cours de mise à jour (via configurationService le haricot constructorInjectedBean est recréé et ré-injectée dans le contexte de l'application et dépendante des haricots.

Nous pouvons présumer que constructorInjectedBean est à l'aide d'une interface proxy de la magie est en effet une option.

J'espère avoir fait de la question un peu plus clair.

  • Ainsi, le configuration haricot doit être mis à jour au moment de l'exécution - ou à chaque fois que l'administrateur de modifier les valeurs? Je que votre question? Ou voulez-vous le DataSource / MailSender haricots à utiliser la configuration mise à jour au moment de l'exécution? Ou est-ce les deux?
  • C'est la deuxième: je veux mettre à jour le injecté valeurs de configuration à l'exécution (voir modifier dans l'OP).