xref: /aosp_15_r20/external/javassist/sample/reflect/Main.java (revision f1fbf3c2ab775ce834e0af96b7a85bdc7a0eac65)
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