Comment puis-je faire mes exceptions vérifies mon proxy dynamique? p>
J'ai besoin d'une enveloppe transparente pour une interface qui lance parfois des exceptions vérifiées telles que ioException code>. Est-il possible sans la 3ème partie d'AOP ou d'écrire mon propre proxy? Modification de toutes les 20 méthodes de l'interface à la main n'est pas une option non plus. P>
3 Réponses :
Vous pouvez utiliser un proxy dynamique. Tant que les exceptions vérifiées font partie de l'interface, vous pouvez lancer les exceptions vérifiées à partir du gestionnaire d'invocation. Sinon, cela est illégal et créera une exception non déclarée qui enveloppe l'exception vérifiée. sortie: p> avec une exception vérifiée non déclarée pour Interface A: P> interface A{
void x();
}
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.x(Unknown Source)
at X.main(X.java:22)
Caused by: java.io.IOException
at X$1.invoke(X.java:19)
... 2 more
Merci. Une note, méthode.invoke () (souvent utilisée dans InvocationHandler.invoke () code> enveloppe l'exception originale dans
InvocationTargetException code>, il doit donc être non emballé.
Un proxy dynamique peut lancer une exception vérifiée si l'exception est déclarée dans la signature de la méthode de l'interface, elle est proxyable. Du Sun's Référence de proxy dynamique : < / p>
Si une exception est lancée par la méthode Invoke, elle sera également lancée par l'invocation de la méthode sur l'instance proxy. P>
Le type d'exception doit être assigné à l'une quelconque des types d'exception déclarés dans la signature de la méthode d'interface ou aux types d'exception non cochée
java.lang.runtimeException code> ou
java.lang. Erreur code>. P>
Si une exception vérifiée est lancée par appel qui n'est attribuible à aucun des types d'exception déclarés dans la clause de lancement de la méthode d'interface, un
non recto-édithableException code> sera lancé par l'invocation de la méthode sur le instance de proxy. Le
non reconscepté (code> index / code> sera construit avec l'exception qui a été lancée par la méthode Invoke. P> blockQuote>
Ce que vous cherchez probablement, c'est que Konrad mentionne ci-dessus:
Le lien vers le blog externe ci-dessus est parti, mais par ex. amittechblog.wordpress.com/2011/07/24/... a aussi un peu de blurb sur pourquoi c'est une bonne idée de le faire