Método da superclasse por reflection

1 resposta
hesenger

Bom, é exatamente como o título do tópico diz, gostaria de saber se alguém tem alguma idéia de
como chamar um método na superclasse através de reflection.

O problema é o seguinte: estou lidando com proxies do CGLIB, e eu preciso executar o método
de fora do interceptor, em outra classe, mas como a classe que faz isso, a MethodProxy do CGLIB,
não é serializable, não posso utiliza-la nesta outra classe. E se eu simplesmente chama o método
novamente ele cai num loop inifinito pois fica sempre chamando o interceptor e acaba nunca
executando o método realmente.

Estou pensando em fazer gambiarras do tipo guardar em alguma variável se esta é a primeira
execução do método, e assim o interceptor saber se pode executar o super.method() mas ia ficar
beeeeeem feio.

Alguém tem alguma idéia?

1 Resposta

hesenger

Finalmente consegui e funcionou perfeitamente, se alguém um dia precisar de coisa do genero meu código ficou assim:

Method m = obj.getClass().getMethod(methodName, types);
			String desc = Type.getMethodDescriptor(m);
			Signature sign = new Signature(methodName, desc);
			MethodProxy proxy = MethodProxy.find(obj.getClass(), sign);
			
			proxy.invokeSuper(obj, args);

Lembrando que tudo é feito através do CGLIB, por isso a necessidade do MethodProxy, pois o meu objeto na verdade
não é o objeto real, e sim um uma proxy, que deve executar o meétodo real e não mais o da proxy para ser interceptado.

Criado 20 de setembro de 2009
Ultima resposta 20 de set. de 2009
Respostas 1
Participantes 1