`

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
分享到:
评论

相关推荐

    类加载器,classload

    关于类加载器的 上课ppt -java虚拟机自带的加载器 根类加载器(Bootstrap) c++写的看不到扩展类加载器(extension) 系统类加载器(System) AppClassLoad 用户自定义的类加载器 Java.lang.ClassLoader的子类

    深入探讨 Java 类加载器.pdf

    类加载器不仅支持了Java程序的基础执行,还提供了强大的灵活性和扩展性,比如动态加载类的能力,这对于构建高度模块化和可扩展的应用程序至关重要。此外,类加载器还在安全性方面发挥着重要作用,通过隔离不同来源的...

    Java类热替换(热部署)源码

    在Java中,类加载器负责查找并加载类的字节码文件(.class)。默认情况下,系统类加载器会根据类的全限定名在ClassPath中查找对应的.class文件。但是,如果我们想要在运行时动态替换类,就需要自定义ClassLoader,...

    Java反序列化回显解决方案.docx

    // Summer.class 类字节码 private static byte[] testClassBytes = new byte[]{ /* ... */ }; public Class&lt;?&gt; defineClassFromBytes(String name, byte[] b) { return super.defineClass(name, b, 0, b....

    java classload教程

    Java 类加载机制是Java语言的核心特性之一,它允许程序在运行时动态加载和解析类,极大地增强了灵活性和可扩展性。本文将详细讲解类加载的基础知识、Java虚拟机(JVM)如何使用类加载器以及如何自定义类加载器。 ...

    classLoad.rar

    在java中 当你用一个类加载器 去加载一个类的时候 这个类里面所有的出现的过得类 都会通过这个类加载器加载在这个类后续 的操作中,只要是有由这个类衍生出的 那么涉及的类 都由这个类加载器进行加载 该类加载器为...

    破解java加密的ClassLoader.java,在classloader植入破解代码

    破解java加密的ClassLoader.java,在classloader植入破解代码

    JAVA内存结构-GC-CLASSLOAD

    - **作用**:存储已加载的类信息、常量、静态变量和编译后的代码。 - **特点**:线程共享,也称为Non-Heap,内存不足时抛出`OutOfMemoryError`。 5. **直接内存** - **作用**:非JVM规范定义,但被频繁使用,如...

    如何正确的使用Java序列化技术

    序列化(Serialize)、反序列化(DeSerialize)、类加载(ClassLoad)、指纹技术(Fingerprint) ### 1. Java序列化技术概述 Java序列化技术是一种强大的功能,它能够将对象的状态转化为字节流,以便在网络上传输...

    ClassLoader运行机制 自己写的

    在Java虚拟机(JVM)中,类加载器(ClassLoader)是至关重要的组成部分,它负责查找和加载类的字节码文件。理解ClassLoader的工作机制对于深入掌握Java应用程序的运行至关重要。这里我们将详细讨论ClassLoader的运行...

    JavaSE:JavaSE演示

    JavaSE ...│ ├─classLoad │ │ ├─ClassCypher.java │ │ ├─ClassLoadDemo.java │ │ ├─EncryptedCalss.java │ │ └─MyClassLoad.java │ └─designPattern │ ├─decorator &lt;d

    值得收藏的2017年Java开发岗位面试题

    Class.forName和classloader都是用于加载类的,但Class.forName只能加载已经加载的类,而classloader可以加载新的类。 7. Java7、Java8的新特性。 Java7和Java8都引入了许多新特性,例如Java7的try-with-resources...

    Java虚拟机类加载机制?案例分析

    在《Java虚拟机类加载机制》一文中详细阐述了类加载的过程,并举了几个例子进行了简要分析,在文章的后留了一个悬念给各位,这里来揭开这个悬念。建议先看完《Java虚拟机类加载机制》这篇再来看这个,印象会比较深刻...

    jboss 5 原理 2 classloader

    随着OSGi(Open Services Gateway Initiative)风格的类加载机制逐渐流行,以及新的Java模块和类加载规范的出现,JBoss对自身的类加载层进行了重构,以适应这些新的需求。在JBoss Microcontainer中,类加载层扮演着...

    java面试难点讲解:hashmap,spring aop,classload,dubbo,zookeeper,session等。

    面试必考之HashMap源码分析与实现 探索JVM底层奥秘ClassLoader源码分析与案例讲解 面试必备技能之Dubbo企业实战 ...互联网系统垂直架构之Session解决方案 分库分表之后分布式下如何保证ID全局唯一性 ...

    用JVM工具接口创建调试和分析代理.docx

    提供了更多的API函数,增加了对变量、字段、方法和类信息的查询能力;并且支持更多类型的事件通知,如异常、字段访问和修改、断点以及单步执行等。此外,JVMTI的设计更加灵活,对虚拟机(VM)的影响更小,且具有错误...

    Android插件框架Android-Plugin-Framework.zip

    用来开发Android插件APK,并通过动态加载的方式在宿主程序中运行。 若插件APK是完全独立的APK,那么插件apk也可独立安装运行。 若插件APK不是完全独立的apk,比如和插件宿主程序共用一些依赖库,那么插件apk...

    ClassLoadUtil

    类加载工具,用于java项目中动态加载需要的类库

Global site tag (gtag.js) - Google Analytics