Je traite avec une base de code héritée où une classe qui n'est pas utilisée au printemps doit obtenir une classe qui est em> câblée au printemps. J'espérais créer une classe d'usine qui a été câblée au démarrage, puis je pourrais appeler la méthode getinstance () pour obtenir un objet câblé. Quelle est la meilleure façon d'aller à ce sujet? Exemple: P> <bean id="legacyA" class="LegacyA"/>
<bean id="foo" class="Foo"/>
<!-- I need this bean to be injected with foo so that the FooFactory can return a foo -->
<bean id="fooFactory" class="FooFactory"/>
3 Réponses :
définit le haricon comme un singleton dans la configuration de printemps d'utilisation ici? Vous pouvez ensuite l'injecter dans EDIT: RE. Votre question modifiée (!) Je ne sais pas pourquoi vous n'injectez pas simplement FOO comme un singleton dans votre usine. Notez également que vous pouvez utiliser la méthode Legacyb code> à l'aide d'une propriété ou d'une injection de constructeur (ma préférence est la dernière), puis seule l'instance d'une seule instance est disponible. P>
getInstance () code> via les configurations de ressort en utilisant méthode d'usine et maintenir l'injection à travers toutes les classes. P>
Désolé d'avoir à changer légèrement la question. Je n'ai pas réalisé qu'au peu plus tard que j'avais la question entière de ma tête.
Merci pour l'information. Ce n'est pas un problème. Réponse modifiée de manière appropriée.
Utiliser des statiques comme celui-ci va vraiment contre le grain du printemps CIO, mais si vous êtes vraiment avez em> pour les utiliser, je suggérerais d'écrire un crochet de printemps simple qui prend le foo code> et l'injecte dans le FOOFACTORY code>, par exemple <bean id="foo" class="Foo"/>
<bean class="FooFactoryProcessor">
<property name="foo" ref="foo"/>
</bean>
convenu en ce qui concerne votre commentaire statique. Je ne baisserais normalement jamais cette route, mais le code hérité utilise cette classe statique partout et la meilleure façon de crochet dans ce nouvel objet de printemps sans casser le code existant consiste à conserver les appels à l'ancienne classe statique et à avoir cette statique. Classe Utilisez le nouvel objet filaire de ressort amélioré et amélioré.
Pourquoi ne laissez-vous pas simplement le printemps gérer à Foofactory directement. Vous n'avez pas vraiment besoin de l'abstraction que c'est "FOOFACTORYProcessor". Vous pouvez ajouter un séquin immobilier non statique à FOOFACTORY pour définir FOO dessus.
Ceci est vrai, oui, mais j'entraînais les lignes du plus petit nombre de modifications apportées au code hérité, ce que l'OP semblait être après.
En plus de la réponse de Skaffman, vous devez faire très attention à l'ordre d'initialisation. P>
Lorsque vous utilisez des haricots de printemps, seul le cadre déterminera automatiquement le bon ordre des éléments d'initialisation. Dès que vous faites des tours singleton cependant, cela peut casser si vous ne faites pas attention. p>
En d'autres termes, assurez-vous que legacya ne peut pas être exécuté avant que le contexte de l'application se termine le chargement. P>
Comment va-t-il injecté dans Foofactory? Un setter, constructeur, ...?