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
•引导类加载器(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