java的类装载器使用的是优先策略,加载类的时候先找到哪个就加载哪个。有时候我们做一个系统,当类库非常庞大的时候,类可能会出现冲突,也就是类路径中存在不同版本的两个相同的类,这往往给调试带来非常大的麻烦,我们可能修改了类,但由于类加载器却使用的是另外一个未被更新的类,这个时候就会丈二和尚摸不着头脑,一度使调试过程误入歧途。
那么怎么来确定我当前所加载的类是位于哪个路径或者存在于哪个jar包当中呢?Java语言给我们的解决方案如下代码所示:
import java.security.CodeSource;
import java.security.ProtectionDomain;
import org.apache.commons.lang.StringUtils;
/**
* 判断类是从哪个jar包中加载的
* @author Winter Lau
*/
public class Test {
public static void main(String[] args) {
ProtectionDomain pd = StringUtils.class.getProtectionDomain();
CodeSource cs = pd.getCodeSource();
System.out.println(cs.getLocation());
}
}
这段代码在我的机器上运行的结果是:
file:/D:/PROJECTS/JAVA/DLOG4J_JAVAYOU/webapp/WEB-INF/lib/commons-lang-1.0.1.jar
这就是StringUtils这个类所在的jar包,一目了然。但是有一个限制经由系统类加载器所加载的类不能使用该方法来获取路径,假如你对 String类做上面的测试就会发生空指针异常,因为所得到的CodeSource为空,你可以在程序启动的时候使用-verbose来查看系统类的装载信息,使用方式有如:
java -verbose MyApp
分享到:
相关推荐
在我们的例子中,标题提到的"java 类从哪个jar包加载的",这通常涉及到类路径(ClassPath)的设置。类路径告诉JVM在哪里查找类文件。你可以通过`-cp`或`-classpath`命令行选项,或者在`JAVA_OPTS`环境变量中指定。...
本文将深入探讨"springboot+java类热加载"这一主题,包括其核心概念、实现方式以及相关技术。 **热加载(Hot Loading)**是开发过程中的一个重要功能,它允许开发者在不重启应用的情况下更新代码,提高开发效率。在...
### Java加载.jar包详解 #### 一、Java 类加载机制概览 自 JDK 1.2 版本之后,Java 类加载机制发生了一个重要的变化,引入了一种名为**类加载委托**的概念。这一机制的核心思想在于,如果某个 `ClassLoader` 无法...
Java类加载器是Java运行时环境的一个关键组成部分,负责将类文件(.class)从各种来源加载到JVM中。它不仅管理类的生命周期,还确保了类的正确加载和初始化,是Java动态特性的基石。 #### 类加载器的工作原理 Java...
2. **扩展类加载器**(Extension Class Loader):负责加载`java.ext.dirs`系统属性指定路径下的jar包。这些jar包通常包含了Java平台的扩展库。 3. **应用程序类加载器**(Application Class Loader):又称为系统...
Java URLClassLoader 是Java标准库中的一个类加载器,它允许我们动态地从指定的URL位置加载类和资源。这个功能在开发插件系统、热部署或者处理多种版本库的场景中非常有用。从JDK 1.2开始,`java.net.URLClassLoader...
动态加载jar包技术主要涉及Java的反射机制、类加载器和插件系统。下面我们将深入探讨这些知识点。 首先,了解Java的反射机制是理解动态加载的基础。Java反射API允许我们在运行时检查类、接口、字段和方法的信息,...
自定义Java类加载器允许我们根据特定需求扩展默认的加载机制,例如,从非标准位置加载类或者实现动态加载。在Java中,类加载过程分为加载、验证、准备、解析和初始化五个阶段。 首先,让我们了解Java中的默认类加载...
传统的Java应用程序在启动时,由JVM(Java虚拟机)通过类加载器将类加载到内存中,一旦加载完成,除非程序退出,否则这些类通常不会被重新加载。然而,在开发过程中,我们可能希望在不重启应用的情况下,对已加载的...
Java 类加载器是Java语言的一项强大机制,它负责在运行时将类的字节码转换为实际可执行的代码。类加载器对于理解和优化应用程序的行为至关重要,尤其是涉及到类的动态加载、热部署或者隔离不同环境的类加载需求时。...
Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将编译后的字节码文件(.class文件)加载到JVM中并转换为运行时的数据结构。Tomcat,作为广泛使用的Java Servlet容器,它自定义了一套类加载机制,以满足Web...
在Java编程中,有时我们需要动态地加载外部JAR文件,并执行其中特定的类方法,这在插件系统、模块化应用或动态扩展性需求中尤为常见。本篇将详细讲解如何实现这一目标。 首先,理解JAR(Java Archive)文件是Java...
Java 类加载原理是Java运行时环境中的核心机制之一,它涉及到类的生命周期、类加载器的层次结构以及类的查找和加载过程。了解这一机制对于深入理解Java平台的工作原理至关重要,尤其是在开发自定义类加载器或者处理...
总结来说,Java动态加载JAR或ZIP包是通过自定义类加载器实现的,它可以让我们在运行时按需加载外部库,提高系统的可扩展性和灵活性。这个过程涉及到类加载器的创建、文件的读取、类的解析和实例化等多个步骤,是一项...
Java应用程序类加载器是Java平台的核心组成部分之一,它负责加载应用程序中的类到JVM(Java虚拟机)中,使得程序能够执行。理解类加载器的工作原理对于深入学习Java编程至关重要。在Java中,类加载器按照层次结构...
Java中的类加载器是JVM(Java虚拟机)的核心组件之一,它们负责将.java源代码编译成的.class字节码文件加载到JVM中,从而使得程序能够运行。类加载器不仅涉及到程序的正常执行,还与Java的动态加载、模块化系统以及...
类加载器不仅能够加载类,还能够根据不同的需求定制加载方式,如从特定位置加载类或实施类的安全性检查等。 #### 二、JDK简介 **JDK(Java Development Kit)**是Java语言的软件开发工具包(SDK)。JDK包含了Java运行...
它们按照层次结构工作,遵循"委托模型",即从顶层的启动类加载器开始尝试加载类,如果找不到则逐级向下委托。 要实现动态加载jar文件,我们需要创建自定义的类加载器。这个类加载器需要继承`java.lang.ClassLoader`...
双亲委派模型是Java类加载器的重要特性之一,它的基本流程是:当一个类加载器收到加载类的请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器去完成,每个层次的类加载器都是如此。如果父类加载器...