2010-07-25 17 views
2

J'ai fournisseur qui devrait injecter javax.mail.Session (le fournisseur le regarde dans le contexte env de tomcat) comme singleton. Il y a un problème quand j'utilise l'injection de champ quelque part dans le code:Existe-t-il un moyen d'injecter la classe finale avec guice?

java.lang.IllegalArgumentException: Cannot subclass final class class javax.mail.Session 

Y a-t-il un moyen de contourner ce problème? Seuls les indices que j'ai trouvé pointent vers Spring AOP/Proxies.

Merci & & ce qui a trait

Répondre

2

Regardez ce http://code.google.com/p/google-guice/wiki/AOP. Il semble qu'il y ait certaines limites:

Limitations

Dans les coulisses, l'interception de la méthode est mise en œuvre en générant bytecode lors de l'exécution. Guice crée dynamiquement une sous-classe qui applique intercepteurs par des méthodes de remplacement. Si vous êtes sur une plate-forme que ne prend pas en charge la génération bytecode (comme Android), vous devez utiliser Guice sans prise en charge AOP.

Cette approche impose des limites à ce que les classes et les méthodes peuvent être interceptés :

Les classes doivent être publiques ou paquet-privé. Les classes doivent être non-finale méthodes doivent être publiques, méthodes privées emballage ou protégées doivent être instances non-finales doivent être créés par Guice par un constructeur @Inject -annotated ou sans argument

+0

merci, je vais utiliser une enveloppe alors. – zeratul021