曾今遇到这样的问题:两个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()找
到该类加载器。如果没有特别指定,则用户自定义的任何类加载器都将该类加载器作为它的父加载器。
加载的时候注意下加载顺序就能解决这个问题.
分享到:
相关推荐
与Common ClassLoader类似,但它的优先级更高,这意味着如果在两个目录下有同名的类,Shared ClassLoader加载的类将被优先考虑。 #### 6. WebApp ClassLoader WebApp ClassLoader是最底层的类加载器,它负责加载每...
java ClassLoader的学习 java是一门解释执行的语言,由开发人员编写好的java源文件先编译成字节码文件.class... 一个类如果要被JVM所调度执行,必须先把这个类加载到JVM内存里,java.lang下有个很重要的类ClassL
- 对于`javax.*`, `org.xml.sax.*`, `org.w3c.dom.*`, `org.apache.xerces.*`, `org.apache.xalan.*`等包下的类,它们不受上述加载顺序的影响,即所有这些类都由Bootstrap ClassLoader加载。 3. **META-INF/...
例如,假设有一个名为A的类,加载顺序如下: 1. 如果WebApp ClassLoader的缓存中没有类A,则会查找System ClassPath,未找到A。 2. 接下来查找Application Class Path,如果在其中找到了A(如在wsdl4j.jar中),则...
了解Java中继承关系的加载顺序对于理解和优化程序性能至关重要。以下是对这个主题的详细阐述: 1. 类加载机制 Java的类加载过程分为三个主要阶段:加载、验证、准备、解析和初始化。当一个类被首次引用时(例如...
2. 类加载顺序:观察不同类加载器加载类的顺序,验证双亲委派模型。 3. 动态加载:创建自己的类加载器,尝试动态加载新的类,实现代码的热替换。 4. 类隔离:通过自定义ClassLoader实现不同模块之间的类隔离,避免类...
在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让...
在Tomcat中,我们可以通过配置`catalina.properties`文件和`server.xml`文件来调整类加载策略,例如设置自定义的类加载顺序或启用共享类加载器。 此外,Tomcat还支持热部署,即在不重启服务器的情况下更新Web应用的...
1. 类加载的委托模型:理解`ClassLoader`如何按照委托顺序从父类加载器到子类加载器查找类。 2. 类的定位:如何根据类名找到对应的`.class`文件,特别是在自定义加载逻辑时。 3. 类的加载:解析`.class`文件,创建`...
1. 类冲突:不同类加载器加载相同类导致的问题,可通过调整类加载顺序或使用独立的类加载器解决。 2. 静态初始化器问题:多个类加载器加载同一类,可能导致静态初始化器被执行多次,需要谨慎处理类的加载关系。 3....
Java中类的加载顺序执行结果 Java 中类的加载顺序执行结果是指在 Java 语言中,类的加载顺序执行结果是如何进行的。下面我们将详细介绍 Java 中类的加载顺序执行结果的相关知识点。 类的加载 在 Java 语言中,类...
例如,当我们需要自定义类加载顺序时,可以通过修改`catalina.properties`文件中的`common.loader`、`server.loader`和`shared.loader`属性,或者在Web应用的`WEB-INF/web.xml`中设置`loader`元素。 总的来说,深入...
1. **双亲委派模型**:这是Java类加载器的基础模型,它规定了类加载的顺序。当一个类加载器收到加载类的请求时,它会首先委托父类加载器去尝试加载,只有当父类加载器无法加载时,当前类加载器才会尝试自己加载。这...
通过配置类路径,开发者可以自定义加载顺序和加载来源,例如从网络、文件系统或特定的jar中加载类。 **配置灵活性**: 在开发大型Java应用时,类加载器的配置灵活性变得非常重要。例如,可以创建自定义类加载器来...
WebSphere应用服务器默认的类加载顺序是先从系统类加载器(System ClassLoader)开始,然后是扩展类加载器(Extension ClassLoader),最后是应用程序类加载器(Application ClassLoader)。这种机制可能导致应用中...
4. 如果在多个dex文件中存在相同名称的类,PathClassLoader会按照添加到DexPathList的顺序优先加载第一个找到的类。 自定义ClassLoader在Android开发中并不常见,但有时为了实现动态加载或者热修复等功能,开发者...
1. **加载顺序**:在Tomcat中,类的加载遵循特定的顺序。通常情况下,每个子类加载器会先尝试从自己的类路径中加载类,如果找不到,则会向上委托给父类加载器进行加载。这种委托模式确保了类的单一性和安全性。 2. ...
Bootstrap ClassLoader加载的是系统的根类,如java.lang.Object;Extension ClassLoader负责加载JRE扩展目录下的类;而App ClassLoader则加载应用的类路径中的类。在应用启动时,类的加载顺序遵循"双亲委托模型",即...