`

Java ClassLoader 应用

 
阅读更多

 

 

1.java 读取类文件并加载到JVM中

 

package com.test.dog.util;

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

/**
 * 
 * @author LiuQing
 * @see 类安全加载类
 * @version 1.0
 * @date 2011-10-01
 *
 */
public class SecurityClassLoader extends ClassLoader {
	
	
	private String rootDir;

	/**
	 * @see 重写find 单类加载器
	 * @param name String
	 * @return Class<?>
	 */
	@Override
	protected Class<?> findClass(String name) throws ClassNotFoundException {
		byte[] clazzData = this.getData(name);
		if (clazzData == null) {
			throw new ClassNotFoundException();
		}
		else {
			return this.defineClass(name, clazzData, 0, clazzData.length);
		}
	}
	
 
	/**
	 * @see 加载数据类型
	 * @param clazzName String
	 * @return byte[]
	 */
	public byte[] getData(String clazzName) {
		String filePath = this.getPath(clazzName);
		InputStream input = null;
		ByteArrayOutputStream byteOutput = null;
		try {
			input = new FileInputStream(filePath);
			byteOutput = new ByteArrayOutputStream();
			int bufferSize = 1024;
			byte[] buffer = new byte[bufferSize];
			while (true) {
				int len = input.read(buffer);
				if (len == -1) {
					break;
				}
				byteOutput.write(buffer, 0, len);
			}
		} 
		catch (Exception e) {
			e.printStackTrace();
		}
		return byteOutput.toByteArray();
		
	}
	
	/**
	 * 设置类加载路径
	 * @param clazzName String
	 * @return String
	 */
	public String getPath(String clazzName) {
		return this.rootDir + File.separator + clazzName.replace('.', File.separatorChar) + ".cer";
	}

	/**
	 * @see 设置加载类路
	 * @return String
	 */
	public String getRootDir() {
		return rootDir;
	}

	/**
	 * @see 设置加载类路
	 * @param rootDir String
	 */
	public void setRootDir(String rootDir) {
		this.rootDir = rootDir;
	}

}

 

2.测试例子

 

 

 SecurityClassLoader s1 = new SecurityClassLoader();

		s1.setRootDir("D:\\jdk1.6.0_13\\jdk1.6.0_13\\bin");
		Class<?> clazzOne = s1.loadClass("comtest.usbm.Test");
		Object obj = clazzOne.newInstance();
		System.out.println(clazzOne + "   One");
		//定义参数类型
		Class<?>[] parameters = new Class[]{String.class};
		Method showMethod = clazzOne.getDeclaredMethod("show", parameters);
		//定义传入参数值
		Object[] objs = new Object[]{"LiuQing"};
		showMethod.invoke(obj,objs);
		
		//加载器2
		SecurityClassLoader s2 = new SecurityClassLoader();
		s2.setRootDir("D:\\jdk1.6.0_13\\jdk1.6.0_13\\bin\\comtest\\usbm");
		
		Class<?> clazzTwo = s2.loadClass("comtest.usbm.Test");
		Object objTwo = clazzTwo.newInstance();
		System.out.println(obj.toString());
		System.out.println(objTwo.toString());
		System.out.println(clazzTwo + "   Two");
		//定义参数类型
		Class<?>[] parameters1 = new Class[]{String.class};
		Method showMethod1 = clazzTwo.getDeclaredMethod("show", parameters1);
		//定义传入参数值
		Object[] objs1 = new Object[]{"LiuQing"};
		showMethod1.invoke(objTwo,objs1);
 

 

 

 

 

 

分享到:
评论

相关推荐

    Java ClassLoader定制实例

    理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将深入探讨Java ClassLoader的内部工作,并通过一个具体的实例来展示如何定制自己的ClassLoader。 ...

    java ClassLoader机制及其在OSGi中的应用

    理解ClassLoader的工作原理对于优化Java应用程序性能以及解决类冲突等问题具有重要意义。 一、ClassLoader的基本概念 Java程序由多个类组成,每个类对应一个.class文件。当程序运行时,ClassLoader根据需要动态...

    java classloader

    这篇博文(虽然链接不可用)可能深入探讨了ClassLoader的工作原理及其在Java应用程序中的应用。 ClassLoader分为三个主要层次:Bootstrap ClassLoader、Extension ClassLoader和AppClassLoader(也称为System ...

    java classloader classpath 张孝祥

    ### Java ClassLoader与ClassPath详解 #### 一、概述 在Java编程中,类加载机制是十分关键的一个环节。类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath...

    Java ClassLoader原理

    ### Java ClassLoader原理详解 #### 摘要 本文探讨了Java虚拟机(JVM)中的一个重要特性:动态类加载(Dynamic Class Loading)。这一机制为Java平台提供了强大的能力,允许在运行时安装软件组件,例如从网络下载...

    理解Java ClassLoader机制

    Java ClassLoader机制是Java运行时环境中的核心组件之一,它负责加载类到JVM(Java虚拟机)中,使得程序能够执行。理解ClassLoader的工作原理对于优化应用性能、处理类加载问题以及实现自定义加载器至关重要。 首先...

    Java ClassLoader Tutorial.zip

    总结,Java ClassLoader是Java平台的关键特性,理解其工作原理和应用场景对于优化系统性能、设计可扩展的系统至关重要。通过本教程,读者应能掌握如何利用ClassLoader实现动态加载、安全隔离和版本控制等功能,提升...

    Understanding the Java ClassLoader

    ### Java ClassLoader理解详解 #### 一、引言 在商业流行的编程语言中,Java以其独特的运行机制脱颖而出:它在Java虚拟机(JVM)上运行。这意味着编译后的程序采用一种特殊的、与平台无关的格式,而不是针对特定...

    java classloader讲义-淘宝网

    通过对Java ClassLoader的深入了解,我们可以更好地理解Java类的加载机制以及如何通过自定义ClassLoader来满足特定的应用需求。淘宝网的成功实践为我们提供了宝贵的参考案例,展示了ClassLoaders在实际项目中的重要...

    java classLoader 的全面讲解

    1. 类加载器的层次结构:在Java中,类加载器形成了一个树形结构,通常由Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(应用程序类加载器)组成。Bootstrap加载...

    JAVA ClassLoader 讲解 (类加载器)

    ### Java ClassLoader (类加载器)详解 #### 一、教程提示 如果你正在查看这份文档,在线版中你可以点击下面的任何主题直接跳转到相应的部分。 1. **教程提示** 2. **介绍** 3. **类加载器结构** 4. **编译类加载...

    Understanding the Java ClassLoader.pdf

    在深入探讨Java类加载器(ClassLoader)之前,我们首先需要了解它在Java运行时系统中的核心作用。类加载器是Java虚拟机(JVM)的一个关键组成部分,负责查找、加载和链接类文件到JVM中。它的存在使得Java应用程序...

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

    **java应用程序类加载器(ClassLoader for java Application)**: 当我们创建一个Java应用程序时,比如通过`java MainClass`命令启动,实际上是由应用程序类加载器来执行的。它查找并加载包含主类(Main-Class ...

    了解Java ClassLoader

    Java ClassLoader是Java虚拟机(JVM)的重要组成部分,它负责加载类到JVM中运行。理解ClassLoader的工作原理对于深入学习Java以及进行JVM优化、插件开发等高级技术至关重要。下面将详细介绍Java ClassLoader的基本...

    java中classLoader的使用

    Java中的类加载器(ClassLoader)是Java虚拟机(JVM)的一个重要组成部分,它负责将类的.class文件从文件系统或者网络中加载到内存中,并转换为对应的Class对象。类加载器的工作流程主要包括加载、验证、准备、解析...

    classloader-playground, 一个简单的java依赖隔离容器类.zip

    《深入理解Java类加载器:基于classloader-playground开源项目》 在Java世界里,类加载器(ClassLoader)是理解JVM工作原理的关键一环。它负责将字节码文件(.class)从磁盘、网络或其他数据源加载到内存,并转化为...

    Java_ClassLoader详解

    ### Java ClassLoader 详解 #### 一、ClassLoader 概述 在 Java 语言中,类加载器(ClassLoader)是 Java 运行时环境的核心组成部分之一,它负责将编译后的 `.class` 文件加载到 JVM 中执行。从 JDK 1.0 开始,...

    java中ClassLoader

    Java 中的 ClassLoader 提供了一系列的方法来完成加载类的这个职责,例如加载 Java 应用所需的资源,如图像文件和配置文件等。ClassLoader 还负责加载 Java 应用程序所需的类文件,以便在程序运行时可以正确地调用...

Global site tag (gtag.js) - Google Analytics