Como modificar um metodo em tempo de execução?

Olá pessoal.

Alguém poderia me indicar quais ferramentas posso usar para manipular bytecodes, gostaria de saber como ferramentas como hibernate, etc conseguem por exemplo interceptar um metodo get e fazer com que determinado código deles rode.

Pelo que pesquisei eles fazem uso de proxies, porém não tenho ideia de como e com quais API’s eles fazem isso.

Grato a todos.

cglib.sourceforge.net/

Valew kra.

Exatamente o que eu procurava :wink:

Dependendo do que vc precisar vc pode utilizar reflection e polimorfismo.

[]'s

Pessoal, estou tentando usar o CGLib.

Peguei o jar do CBLib: cglib-2.1_3.jar

Vi que uma das dependencias dele é o asm, então peguei o jar deste: asm-1.4.2.jar

porém na hora de rodar da o seguinte erro:

Exception in thread "main" java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
	at net.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)
	at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:173)
	at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
	at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:117)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
	at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
	at Teste.main(Teste.java:7)

Pensei então deve ser a versão do asm que esta errada, fui na pagina do CGLib: http://cglib.sourceforge.net/dependencies.html e vi que ele usa a versão 1.3.4.

fui para a pagina do ASM http://forge.objectweb.org/project/showfiles.php?group_id=23&release_id=2207

porém la aparece apenas da versão 1.4.2 para cima :?

alguém sabe onde consigo este jar do asm ? ou algum do cglib que ja venha todas as dependencias ?

Grato

http://ftp.cica.es/mirrors/maven2/asm/asm/1.3.4/

Cara,

Usa aspectos!!!

Realmente eles usam o cglib e o asm. Se quer algo mais alto nivel eu sugiro o Javasssit da JBoss. É uma biblioteca alto nivel com que vc consegue muitas das coisas que o pessoas do Hibernate, Spring e companhia usam.

Ah! e sim, o truque é usar proxies.