Java动态加载类ClassLoad和Class.forName

Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:

•引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自java.lang.ClassLoader。负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
•扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class
•系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。负责加载当前java应用的classpath中的所有类。

1. Class.forName通过.class类路径动态加载类,利用反射调用类中的方法。getDeclaredMethod中第一个参数是加载类中的方法名,第二个参数是这个方法要传入的参数值

Class<?> clsClass = Class.forName("org.program.test.jsf.bean.TestrunBean");
java.lang.reflect.Method mymethod = clsClass.getDeclaredMethod("getAllScenarioInProjectTree", Integer.class);
mymethod.invoke(clsClass.newInstance(), 1786);

2.ClassLoader

动态加载jar包文件可以通过File来读取jar包文件内容,然后塞选出其中符合条件的文件,然后加载类
http://blog.csdn.net/mousebaby808/article/details/31788325


ClassLoader clsLoader = Thread.currentThread().getContextClassLoader();
通过clsLoader可以获取当前线程装载的类,也就是class文件,调试clsLoader对象可以看到装载的类的路径和名字,也就是获取类的方式(org.program.test.jsf.bean.TestrunBean)
Class cls = clsLoader.loadClass("org.program.test.jsf.bean.TestrunBean");
TestrunBean testrunBean = (TestrunBean) cls.newInstance();


ClassLoader classLoader = this.getClass().getClassLoader();
Class<?> cls = classLoader.loadClass("org.program.test.jsf.bean.TestrunBean");
TestrunBean testrunBean = (TestrunBean) cls.newInstance();

http://longdick.iteye.com/blog/442213
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值