`

Java自定义的类加载器

    博客分类:
  • J2SE
阅读更多

一、类加载器类别
 *  1.java虚拟机自带的加载器
 *   根类加载器(Bootstrap,c++实现)
 *    扩展类加载器(Extension,java实现)
 *    系统类加载器(System,java实现)
 *  2.用户自定义的类加载器
 *    java.lang.ClassLoader的子类
 *    用户可以定制类的加载方式

Java自定义类加载器参考

package classloader;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;

/**
 * 
 * 一、ClassLoader加载类的顺序
 *  1.调用 findLoadedClass(String) 来检查是否已经加载类。
 *  2.在父类加载器上调用 loadClass 方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。 
 *  3.调用 findClass(String) 方法查找类。
 * 二、实现自己的类加载器
 * 	1.获取类的class文件的字节数组
 * 	2.将字节数组转换为Class类的实例
 * 
 * 
 * @author lei 2011-9-1
 */
public class ClassLoaderTest {

	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
		//新建一个类加载器
		MyClassLoader cl = new MyClassLoader("myClassLoader");
		//加载类,得到Class对象
		Class<?> clazz = cl.loadClass("classloader.Animal");
		//得到类的实例
		Animal animal=(Animal) clazz.newInstance();
		animal.say();
	}

}
class Animal{
	public void say(){
		System.out.println("hello world!");
	}
}
class MyClassLoader extends ClassLoader {
	//类加载器的名称
	private String name;
	//类存放的路径
	private String path = "E:\\workspace\\Algorithm\\src";

	MyClassLoader(String name) {
		this.name = name;
	}
	
	MyClassLoader(ClassLoader parent, String name) {
		super(parent);
		this.name = name;
	}
	/**
	 * 重写findClass方法
	 */
	@Override
	public Class<?> findClass(String name) {
		byte[] data = loadClassData(name);
		return this.defineClass(name, data, 0, data.length);
	}
	public byte[] loadClassData(String name) {
		try {
			name = name.replace(".", "//");
			FileInputStream is = new FileInputStream(new File(path + name + ".class"));
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			int b = 0;
			while ((b = is.read()) != -1) {
				baos.write(b);
			}
			return baos.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    自定义Java类加载器

    - **安全沙箱**:每个加载器都有自己的命名空间,可以通过自定义加载器限制代码访问权限。 - **插件系统**:插件有自己的类加载器,使得插件可以独立于主程序加载和卸载。 在编写`MyClassLoader`时,需要注意的是,...

    java自定义类加载器代码示例

    Java自定义类加载器代码示例 Java自定义类加载器代码示例是一种使用Java语言实现的类加载器示例,主要用于加载Java类文件。类加载器是Java虚拟机(JVM)中的一种机制,用于将Java类文件加载到JVM中,以便JVM可以...

    自定义类加载器实现自定义加载

    在Java编程语言中,类加载器(ClassLoader)是运行时环境...理解类加载机制并正确实现自定义加载器是提升Java应用开发能力的重要一步。在实际项目中,合理利用类加载器可以解决很多复杂问题,比如模块化、动态更新等。

    java自定义类加载classloader文档,包括代码

    ### Java自定义类加载器(Class Loader)详解 #### 一、引言 在Java语言中,类加载机制是其动态特性的核心之一。通过类加载器(Class Loader),Java程序能够在运行时根据需要加载所需的类,从而实现高度的灵活性...

    自定义类加载器

    创建自定义类加载器通常需要继承`java.lang.ClassLoader`类,并重写`findClass()`方法。`findClass()`方法会在类加载器中查找指定名称的类的字节码。以下是一个简单的基于磁盘的自定义类加载器示例: ```java ...

    Java基于自定义类加载器实现热部署过程解析

    "Java基于自定义类加载器实现热部署过程解析" Java中基于自定义类加载器实现热部署是指在不重启应用的情况下,当类的定义即字节码文件修改后,能够替换该Class创建的对象。热部署是Java中的一个重要概念,它可以...

    Java实现的自定义类加载器示例

    Java 实现的自定义类加载器示例 Java 实现的自定义类加载器是 Java 语言中的一种机制,允许开发者自定义类加载器,以满足特定的需求。本文将详细介绍 Java 实现的自定义类加载器的原理和实现技巧。 ClassLoader 类...

    Java加壳源码-自定义类加载器

    Java加壳技术是一种保护Java程序不被轻易反编译或篡改的安全手段,它通过自定义类加载器来实现对原始字节码的包装。在Java中,类加载器是负责加载类到JVM(Java虚拟机)的核心组件。自定义类加载器允许开发者根据...

    java类加载器学习二、自定义类加载器

    java类加载器学习二、自定义类加载器

    java类加载器

    ### Java 类加载器详解 #### 一、类加载器概述 在Java中,类加载器(Class Loader)是一项核心机制,用于将字节码(.class文件)加载到JVM中,使其成为运行时的对象。类加载器不仅实现了类的加载功能,还确保了...

    CustomClassLoader:Java 自定义类加载器

    通过理解类加载原理和自定义加载器的工作方式,我们可以更灵活地控制类的生命周期,提高软件的可扩展性和安全性。在实际项目中,务必谨慎使用,遵循良好的设计原则,以确保代码的可维护性和稳定性。

    Java的类加载器

    自定义类加载器通常继承自`java.lang.ClassLoader`类,重写`loadClass(String name)`方法。在该方法中,开发者可以控制如何查找和加载类。 5. **类加载器与类的关系** 类加载器和类之间存在一对一的关系,不同的类...

    Java类加载器原理

    - `findClass()`:从Java 1.2开始,自定义类加载器通常只需要重写此方法,当父类加载器找不到类时,此方法会被调用来查找类。 - `defineClass()`:这是一个final方法,用于将字节数组转换为Class对象,实现字节码...

    ClassLoader类加载器

    2. Extension ClassLoader:扩展类加载器,负责加载`&lt;JAVA_HOME&gt;/lib/ext`目录下的扩展类库,或者被`-Djava.ext.dirs`指定的路径中的类。 3. Application ClassLoader:也称为系统类加载器,负责加载用户类路径`-cp...

    java 类加载器 加密

    在这个例子中,`EncryptedClassLoader`是我们的自定义加载器,它覆盖了`findClass`方法以处理加密的类。`main`方法中,我们使用`Class.forName`加载类,并传入我们的自定义类加载器。找到main方法后,通过反射调用它...

    自定义类加载代码

    要实现一个自定义类加载器,你需要继承`java.lang.ClassLoader`类,并重写其关键方法`findClass(String name)`。这个方法接收全限定类名作为参数,返回加载后的`Class`对象。在`findClass`中,你需要实现查找和读取...

    类加载器文件

    自定义类加载器时,需要继承`java.lang.ClassLoader`或其子类,并指定一个父加载器。如果没有指定,则默认使用`ClassLoader.getSystemClassLoader()`作为父加载器。这种设计遵循了**委托模式**,即自定义类加载器在...

    java应用程序类加载器,ClassLoader for java Application

    Java应用程序类加载器是Java平台的核心组成部分之一,它负责加载应用程序中的类到JVM(Java虚拟机)中,使得程序能够执行。理解类加载器的工作原理对于深入学习Java编程至关重要。在Java中,类加载器按照层次结构...

Global site tag (gtag.js) - Google Analytics