2012-03-14 25 views
6

tarafından yüklenen sınıflar Çekirdek JDK 5 sınıfının bir yöntemine "insertBefore" eklemek istiyorum. Bir sebepten dolayı çalışmıyor. İşte kod bir örnek:Javascript java çekirdeği sınıfları ile alet kullanmak mümkün mü? Önyükleme sınıfı yükleyicisi

ClassPool pool = ClassPool.getDefault(); 
CtClass ctClass = pool.get("com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter"); 
CtMethod ctMethod = ctClass.getDeclaredMethods()[0]; 
ctMethod.insertBefore("System.out.println(\"WORKED\");"); 
ctClass.toClass(); 

com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter JDK ile birlikte geliyor, bu rt.jar içeride. Yukarıdaki kod parçasından sonra, XSMessageFormatter sınıfını çalıştırmaya zorlayan bazı kodları çalıştırıyorum, ancak eklenen kodum asla çalışmaz. Bunu sadece kendi sınıflarım üzerinde çalışabilirim. Bu kod basit bir bağımsız uygulama olarak çalışıyor.

Herhangi bir fikrin var mı?

cevap

1

Java çekirdeği sınıflarını değiştirmek kötü bir fikirdir. Java Instrumentation API'yi kullanmanın doğru yolu (Java 1.5'den beri).