Proxy Dynamique en Golo
Golo est fait pour utiliser des classes Java. Si vous manipulez des classes qui implĂ©mentent des interfaces, il est tout Ă fait possible de âgrefferâ des comportements Ă vos mĂ©thodes de classes (celles dĂ©clarĂ©es dans une interface) grĂące Ă import java.lang.reflect.Proxy
. Voyons donc comment faire:
Imaginez une interface java âToonâ:
Imaginez une classe java qui implémente Toon
:
Proxy dynamique
Il est possible de créer un proxy de TinyToon
, implémentant donc Toon
et ce dynamiquement :
Ce peut ĂȘtre trĂšs pratique, si vous avez des traitements (mĂ©thodes) qui âattendentâ des objets de type Toon
, et que vous souhaitez ajouter des comportements aux mĂ©thodes (ce nâest possible que pour les mĂ©thodes dĂ©clarĂ©es dans lâinterface implĂ©mentĂ©e par la classe) :
Dans un 1er temps, si nous utilisons tout simplement TinyToon
:
Nous obtiendrons Ă lâexĂ©cution la sortie suivante :
HELLO I'M Babs : HI !!!
BLABLA BY Babs : IT'S SO CUTE
Maintenant, nous allons créer notre proxy de TinyToon
:
Nous allons maintenant utiliser Proxy.newProxyInstance()
:
Remarquez que nous âcastonsâ notre closure |proxy, method, args...| { ... }
en InvocationHandler
, en utilisant ():to(InvocationHandler.class)
.
Nous obtiendrons Ă lâexĂ©cution la sortie suivante :
You've called : hello
hello from proxy
HELLO I'M Babs : HI !!!
You've called : speak
speak from proxy
BLABLA BY Babs : IT'S SO CUTE
Et voilĂ , vous venez de faire de lâAOP avec Golo. Ce qui vous dĂ©montre une fois de plus la puissance de ce langage.
Vous trouverez ici une version âgĂ©nĂ©riqueâ rĂ©utilisable dâun proxy dynamique : https://github.com/k33g/DynoGolo.
42. ;)
Ă venir : comment modifier directement Golo. Stay tuned
Tweet