Spring3.x__反射机制

1.通过反射机制创建对象过程

cagegory类:

public class cagegory {
  private Integer id;
  private String name;

  //自行脑补set get 方法.
}

cagegory对象的创建:

  //获取当前进程的类加载器
  ClassLoader loader = Thread.currentThread().getContextClassLoader();
  Class clazz = loader.loadClass("jzx.bean.cagegory");

  //获取类的默认构造器对象并调用 构造该对象
  Constructor cons = clazz.getDeclaredConstructor(null);
  cagegory cage = (cagegory)cons.newInstance();

  Method setName = clazz.getMethod("setName", String.class);
  setName.invoke(cage, "盖伦");
  Method setId = clazz.getMethod("setId", Integer.class);
  setId.invoke(cage, 3);

  //获取 类的成员变量类

  Field id = clazz.getDeclaredField("id");

  //当成员变量是 private时,使用setAccessible方法略过JVM安全检查。
  id.setAccessible(true);
  id.set(cage, 7);


  System.out.println(cage.toString());

额外解读:

每次运行JVM时,都会产生三个加载器:分别是 根加载器(ClassLoader),扩展类加载器(ExtClassLoader) 和  系统类加载器(AppClassLoader)。

默认使用的是 系统类加载器,它是扩展类加载器的子类,扩展类加载器又是 根加载器的子类,但是根加载器是c++编写的,在java中访问不能。

  

猜你喜欢

转载自www.cnblogs.com/bigAssBoy/p/12707176.html