10
mars
2008
Spring et Groovy : GroovyObjectCustomizer
mars
2008
Un article de Hikage
Pas de commentaires
Je suis en train de jouer avec le support Groovy de Spring, via le schéma Lang, et je suis confronté à un problème avec les GroovyObjectCustomizer.
Si vous avez déjà joué avec cela, j’aimerai votre avis !
En effet j’ai ceci, basé sur l’exemple dans la doc :
Un Customizer :
public class MyCustom implements GroovyObjectCustomizer { public void customize(GroovyObject groovyObject) { System.out.println("Customization"); DelegatingMetaClass meta = new DelegatingMetaClass(groovyObject.getMetaClass()){ public Object invokeMethod(Object o, String s, Object o1) { System.out.println("Invoke Method 1"); return super.invokeMethod(o, s, o1); } public Object invokeMethod(Object o, String s, Object[] objects) { System.out.println("Invoke Method 2"); return super.invokeMethod(o, s, objects); } } ; meta.initialize(); groovyObject.setMetaClass(meta); } }
Un bean groovy
class MyObject implements Runnable { public void run() { print "Run !" } }
Ce fichier de configuration :
<lang:groovy id="test" script-source="be/hikage/groovy/MyObject.groovy" customizer-ref="custom"/> <bean id="custom" class="be.hikage.groovy.MyCustom"/>
Et une application test
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); Runnable run = (Runnable) context.getBean("test"); run.run();
En lance cela, je m’attendais à voir un « Invoke Method 1″ ou un « Invoker Method 2″, mais rien, comme si cela ne passait pas du tout par ma metaclasse.
Et si je caste l’objet en GroovyObject et que j’effectue l’appel manuellement, la c’est bien invoqué.
Avez vous déjà remarqué ce problème ?