`
leo_dream
  • 浏览: 134044 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

classloader加载顺序

    博客分类:
  • java
阅读更多

曾今遇到这样的问题:两个jar包包含相同的方法encrypt(),其中一个encrypt()是要被丢弃的,两个jar包必须共存.怎么办呢?

这就要涉及到java中的classloader了.


当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构:

        bootstrap classloader
                 |
        extension classloader
                 |
        system classloader

     bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。在Sun的JVM中,在执行java的命令中使用-Xbootclasspath选项或使用 - D选项指定 sun.boot.class.path系统属性值可以指定附加的类。这个加载器的是非常特殊的,它实际上不是 java.lang.ClassLoader的子类,而是由JVM自身实现的。

      extension classloader -扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的 类包。这为引入除Java核心类以外的新功能提供了一个标准机制。因为默认的扩展目录对所有从同一个JRE中启动的JVM都是通用的,所以放入这个目录的 JAR类包对所有的JVM和system classloader都是可见的。

      system classloader -系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性或 者 CLASSPATH操作系统属性所指定的JAR类包和类路径。总能通过静态方法ClassLoader.getSystemClassLoader()找 到该类加载器。如果没有特别指定,则用户自定义的任何类加载器都将该类加载器作为它的父加载器。

        加载的时候注意下加载顺序就能解决这个问题.

 

 

分享到:
评论

相关推荐

    Tomcat加载顺序

    与Common ClassLoader类似,但它的优先级更高,这意味着如果在两个目录下有同名的类,Shared ClassLoader加载的类将被优先考虑。 #### 6. WebApp ClassLoader WebApp ClassLoader是最底层的类加载器,它负责加载每...

    Java类加载器加载类顺序

    java ClassLoader的学习  java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class...  一个类如果要被JVM所调度执行,必须先把这个类加载到JVM内存里,java.lang下有个很重要的类ClassL

    Tomcat启动时类加载顺序

    - 对于`javax.*`, `org.xml.sax.*`, `org.w3c.dom.*`, `org.apache.xerces.*`, `org.apache.xalan.*`等包下的类,它们不受上述加载顺序的影响,即所有这些类都由Bootstrap ClassLoader加载。 3. **META-INF/...

    ClassLoader运行机制 自己写的

    例如,假设有一个名为A的类,加载顺序如下: 1. 如果WebApp ClassLoader的缓存中没有类A,则会查找System ClassPath,未找到A。 2. 接下来查找Application Class Path,如果在其中找到了A(如在wsdl4j.jar中),则...

    java 继承关系的加载顺序

    了解Java中继承关系的加载顺序对于理解和优化程序性能至关重要。以下是对这个主题的详细阐述: 1. 类加载机制 Java的类加载过程分为三个主要阶段:加载、验证、准备、解析和初始化。当一个类被首次引用时(例如...

    ClassLoader的 一些测试

    2. 类加载顺序:观察不同类加载器加载类的顺序,验证双亲委派模型。 3. 动态加载:创建自己的类加载器,尝试动态加载新的类,实现代码的热替换。 4. 类隔离:通过自定义ClassLoader实现不同模块之间的类隔离,避免类...

    探究java的ClassLoader及类变量初始化顺序

    在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...

    tomcat 类加载机制 —— ClassLoader

    在Tomcat中,我们可以通过配置`catalina.properties`文件和`server.xml`文件来调整类加载策略,例如设置自定义的类加载顺序或启用共享类加载器。 此外,Tomcat还支持热部署,即在不重启服务器的情况下更新Web应用的...

    classloader源码

    1. 类加载的委托模型:理解`ClassLoader`如何按照委托顺序从父类加载器到子类加载器查找类。 2. 类的定位:如何根据类名找到对应的`.class`文件,特别是在自定义加载逻辑时。 3. 类的加载:解析`.class`文件,创建`...

    java classLoader 的全面讲解

    1. 类冲突:不同类加载器加载相同类导致的问题,可通过调整类加载顺序或使用独立的类加载器解决。 2. 静态初始化器问题:多个类加载器加载同一类,可能导致静态初始化器被执行多次,需要谨慎处理类的加载关系。 3....

    Java中类的加载顺序执行结果

    Java中类的加载顺序执行结果 Java 中类的加载顺序执行结果是指在 Java 语言中,类的加载顺序执行结果是如何进行的。下面我们将详细介绍 Java 中类的加载顺序执行结果的相关知识点。 类的加载 在 Java 语言中,类...

    Tomcat 5.0.18 ClassLoader source code insight

    例如,当我们需要自定义类加载顺序时,可以通过修改`catalina.properties`文件中的`common.loader`、`server.loader`和`shared.loader`属性,或者在Web应用的`WEB-INF/web.xml`中设置`loader`元素。 总的来说,深入...

    web_classloader_test.zip_web classloader

    1. **双亲委派模型**:这是Java类加载器的基础模型,它规定了类加载的顺序。当一个类加载器收到加载类的请求时,它会首先委托父类加载器去尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。这...

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

    通过配置类路径,开发者可以自定义加载顺序和加载来源,例如从网络、文件系统或特定的jar中加载类。 **配置灵活性**: 在开发大型Java应用时,类加载器的配置灵活性变得非常重要。例如,可以创建自定义类加载器来...

    websphere6,7上修改类装载顺序为应用程序优先

    WebSphere应用服务器默认的类加载顺序是先从系统类加载器(System ClassLoader)开始,然后是扩展类加载器(Extension ClassLoader),最后是应用程序类加载器(Application ClassLoader)。这种机制可能导致应用中...

    详解Android类加载ClassLoader

    4. 如果在多个dex文件中存在相同名称的类,PathClassLoader会按照添加到DexPathList的顺序优先加载第一个找到的类。 自定义ClassLoader在Android开发中并不常见,但有时为了实现动态加载或者热修复等功能,开发者...

    Tomcat研究之ClassLoader.pdf

    1. **加载顺序**:在Tomcat中,类的加载遵循特定的顺序。通常情况下,每个子类加载器会先尝试从自己的类路径中加载类,如果找不到,则会向上委托给父类加载器进行加载。这种委托模式确保了类的单一性和安全性。 2. ...

    看懂App加载Class的顺序和Method的顺序.zip

    Bootstrap ClassLoader加载的是系统的根类,如java.lang.Object;Extension ClassLoader负责加载JRE扩展目录下的类;而App ClassLoader则加载应用的类路径中的类。在应用启动时,类的加载顺序遵循"双亲委托模型",即...

Global site tag (gtag.js) - Google Analytics