1*f1fbf3c2SXin Li package sample.reflect; 2*f1fbf3c2SXin Li 3*f1fbf3c2SXin Li import javassist.tools.reflect.Loader; 4*f1fbf3c2SXin Li 5*f1fbf3c2SXin Li /* 6*f1fbf3c2SXin Li The "verbose metaobject" example (JDK 1.2 or later only). 7*f1fbf3c2SXin Li 8*f1fbf3c2SXin Li Since this program registers class Person as a reflective class 9*f1fbf3c2SXin Li (in a more realistic demonstration, what classes are reflective 10*f1fbf3c2SXin Li would be specified by some configuration file), the class loader 11*f1fbf3c2SXin Li modifies Person.class when loading into the JVM so that the class 12*f1fbf3c2SXin Li Person is changed into a reflective class and a Person object is 13*f1fbf3c2SXin Li controlled by a VerboseMetaobj. 14*f1fbf3c2SXin Li 15*f1fbf3c2SXin Li To run, 16*f1fbf3c2SXin Li 17*f1fbf3c2SXin Li % java javassist.tools.reflect.Loader sample.reflect.Main Joe 18*f1fbf3c2SXin Li 19*f1fbf3c2SXin Li Compare this result with that of the regular execution without reflection: 20*f1fbf3c2SXin Li 21*f1fbf3c2SXin Li % java sample.reflect.Person Joe 22*f1fbf3c2SXin Li */ 23*f1fbf3c2SXin Li public class Main { main(String[] args)24*f1fbf3c2SXin Li public static void main(String[] args) throws Throwable { 25*f1fbf3c2SXin Li Loader cl = (Loader)Main.class.getClassLoader(); 26*f1fbf3c2SXin Li cl.makeReflective("sample.reflect.Person", 27*f1fbf3c2SXin Li "sample.reflect.VerboseMetaobj", 28*f1fbf3c2SXin Li "javassist.tools.reflect.ClassMetaobject"); 29*f1fbf3c2SXin Li 30*f1fbf3c2SXin Li cl.run("sample.reflect.Person", args); 31*f1fbf3c2SXin Li } 32*f1fbf3c2SXin Li } 33