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

7 respostas
A

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.

7 Respostas

mcbarsotti

cglib.sourceforge.net/

A

Valew kra.

Exatamente o que eu procurava :wink:

R

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

[]'s

A

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

R

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

thicow

Cara,

Usa aspectos!!!

sergiotaborda

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.

Criado 3 de dezembro de 2007
Ultima resposta 30 de abr. de 2008
Respostas 7
Participantes 5