J'ai un problème avec l'intégration de Tapestry 5 et Spring. Le problème se produit si j'ai plusieurs beans qui implémentent la même interface et j'essaie de leur injecter l'annotation @Inject
. Bien sûr, j'ai une exception.Tapisserie 5 et haricots de printemps avec la même interface
J'ai trouvé un tutorial qui dit que, dans ce cas, je dois utiliser @Service
annotation aussi, mais maintenant je suis en train de
org.apache.tapestry5.internal.services.TransformationException
Error obtaining injected value for field
com.foo.pages.Foo.testService: Service
id 'someServiceIDeclaredInSpringContextFile' is not defined by any module...
Quoi qu'il en soit, la question est: Comment puis-je injecter deux grains de printemps différents, qui mettent en œuvre une même interface, dans la page Tapestry 5?
Le comportement de l'intégration de Spring a changé entre la version 5.0 et 5.1. Dans 5.0, chaque bean Spring était exposé en tant que service Tapestry, et si vous aviez deux beans implémentant la même interface, vous pouviez toujours utiliser '@ Service' avec le nom du bean approprié pour clarifier quel objet vous vouliez. Dans 5.1, ce n'est plus le cas, rendant l'annotation '@ Service' inutile pour les beans Spring. Vous êtes arrosé à moins que vous ne soyez prêt à faire de la magie de métaprogrammation vous-même. Bonne solution, d'ailleurs. – Henning