`

classloader举个例子

阅读更多
今天下午被一个同事问起,什么情况下需要用到ContextClassLoader

另一篇博客http://kyfxbl.iteye.com/blog/1900855已经介绍过了,这里就再举个更简单的例子

一个很常见的例子,是在JNDI里的。JNDI的入口类在rt.jar里,是由bootstrap classloader加载的;而JNDI的SPI实现类,则是由各厂商提供的,一般在classpath里,由app classloader加载

所以如果在JNDI的入口类里执行:
Class.forName("xxx.xxx.xxx");

就会抛ClassNotFoundException,要用这个方法才可以
public static Class<?> forName(String name, boolean initialize,  
                   ClassLoader loader)  
        throws ClassNotFoundException  

上面这个方法的第3个参数,就是从ContextClassLoader里来的,用
Thread.currentThread().getContextClassLoader();


下面再用一段代码模拟一下
public class Dong {

	public void call() {
		try {
			Class.forName("net.kyfxbl.test.cl.Target").newInstance();
		} catch (Exception exc) {
			exc.printStackTrace();
		}

	}

}

下面还有一个Target类,只是用来占位
public class Target {

}

最后是作为入口的main方法
public static void main(String[] args) {

		Dong dong = new Dong();
		dong.call();

	}

直接执行是没问题的

然后把Dong这个类打到jar包里,然后放到bootstrap classloader的加载路径里



然后编译会报错,因为bootstrap classloader加载的JAR包默认是不允许乱改的,可以强行去掉这个限制



然后再次执行main方法,就抛出了ClassNotFoundException。因为bootstrap是看不到classpath里的Target类的。同样的代码,在运行时却有不同的表现
  • 大小: 45.5 KB
  • 大小: 39.2 KB
分享到:
评论

相关推荐

    ClassLoader小例子

    本示例"ClassLoader小例子"将深入探讨这个概念,并通过一个具体的程序来演示其工作原理。下面我们将详细讨论ClassLoader的基本概念、工作流程以及如何自定义ClassLoader。 1. **ClassLoader的基本概念** - 类加载...

    classloader简单例子

    总的来说,"classloader简单例子"为我们提供了一个学习和实践Java类加载机制的平台。通过这个例子,我们可以学习到如何自定义类加载器,如何处理类的加载过程,以及如何在特定场景下利用类加载器实现更复杂的功能。...

    classloader

    这篇教程将对Java ClassLoader进行概述,并指导你构建一个示例ClassLoader,该ClassLoader可以自动编译代码后再加载。学习ClassLoader的工作原理以及如何创建自己的ClassLoader是必要的。 首先,让我们深入了解...

    ClassLoader

    在Java编程语言中,`ClassLoader`是一个非常重要的组件,它负责加载程序运行所需的类文件到Java虚拟机(JVM)中。`ClassLoader`不仅管理着类的加载过程,而且其设计模式还对Java的安全性和性能有着至关重要的影响。 #...

    Java ClassLoader定制实例

    在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作原理以及如何定制它,对于深入学习Java的运行机制和进行高级应用开发具有重要意义。本篇文章将...

    ClassLoader运行机制 自己写的

    这意味着当一个ClassLoader尝试加载某个类时,它首先会将任务委托给其父ClassLoader。如果父ClassLoader找不到该类,子ClassLoader才会尝试自己去加载。这个机制保证了系统类(如`java.lang.Object`)只被加载一次,...

    自定义classloader的使用

    总之,自定义Classloader是Java中一个强大而灵活的工具,它可以满足各种高级需求,如动态加载、版本隔离、安全控制等。但同时,正确使用和理解其工作原理至关重要,以确保系统的稳定性和安全性。在实际开发中,应...

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

    Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...

    JVM ClassLoader简析

    ClassLoader是JVM中的一个重要组件,它的主要任务是加载类的二进制数据,转换为Class对象,并供Java应用程序使用。本文将深入浅出地探讨JVM ClassLoader的工作原理和相关知识点。 首先,ClassLoader可以分为三种...

    深入理解ClassLoader工作机制.docx

    这个过程可以通过自定义ClassLoader来实现,比如从数据库中加载类。 2. **验证**:验证是确保加载的类符合Java语言规范,不会破坏JVM的安全性。它检查字节码的格式、数据流和操作符计算、类和字段的访问控制等。 3...

    ClassLoader 案例

    本案例将深入探讨如何创建一个自定义的ClassLoader,利用Java反射和注解技术实现运行时功能更新。 首先,了解ClassLoader的工作原理。Java中的类加载过程分为三个阶段:加载、验证、准备、解析和初始化。默认情况下...

    理解Java ClassLoader机制

    在Java中,ClassLoader分为三个主要层次:Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader(也称为System ClassLoader)。Bootstrap ClassLoader是JVM启动时的第一个加载器,负责加载JDK的根目录下`...

    ClassLoader 详解.doc

    Java应用程序的运行离不开类的加载,而ClassLoader正是这个过程的关键角色。它负责将类的字节码加载到Java虚拟机(JVM)中并转换为可执行的Java对象。深入理解ClassLoader的工作原理对于优化应用性能、解决类加载...

    java classloader

    Java ClassLoader是一个核心的Java运行时组件,负责加载类到Java虚拟机(JVM)中。它是Java平台的独特特性,因为它允许动态加载类,增强了软件的可扩展性和灵活性。这篇博文(虽然链接不可用)可能深入探讨了...

    ClassLoader类加载机制和原理详解

    本文将深入探讨ClassLoader的工作原理和类加载机制,帮助开发者理解这个至关重要的概念。 1. 类加载机制概述 Java的类加载机制遵循“双亲委派模型”(Delegation Model)。当一个类被加载时,它首先会尝试由当前...

    ClassLoader的 一些测试

    在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中执行。这篇测试主要探讨了ClassLoader的工作原理及其在实际应用中的使用。通过阅读给出的博文链接,我们可以深入理解...

Global site tag (gtag.js) - Google Analytics