`

Java自定义Class加载顺序

阅读更多

思路一 :打破双亲加载
1、在Java中默认的Class加载顺序都是父类委托加载,但是有些时候需要自定义加载顺序比如OSGI和ali的Pandora。

2、父类委托加载的基本实现思路,loadClass中在parent中查找class,要是不存在parent则使用findBootstrapClassOrNull调用native方法,要是找不到,使用其中findClass去查找。

3、普通自定义classLoader只是继承loadClass方法,实现findClass做到自定义去加载自己位置或者自己实现的class。但是要想打破父类委托机制去自定义前后顺序去加载class就要完全自己去实现loadClass自己控制加载顺序,比如OSGI bundle之间相互引用的ClassLoader去加载。

思路二、利用双亲加载
1、基本思路就是,自定义classLoader,然后将自定义的classLoader设置为extClassLoader的parent,然后利用双亲加载(除去jdk class)其他的class就会加载自己的class,防止了类冲突的问题。
分享到:
评论

相关推荐

    Tomcat启动时类加载顺序

    Tomcat通过自定义的类加载器实现了特定的类加载顺序,以确保能够正确处理不同来源的类文件,避免类的重复加载和类版本冲突问题。以下是Tomcat启动过程中类加载的具体顺序: #### 三、类加载顺序详述 1. **Bootstrap...

    Java类加载器原理

    类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定的加载顺序。以下是对类加载器原理的详细解释: 1. 类加载器作用: 当JVM启动时,如果需要使用某个类,对应的类加载器会将这个类...

    spring加载顺序讨论

    在Spring框架中,加载顺序是理解应用程序启动过程的关键部分,涉及到bean的实例化、初始化以及依赖注入等多个环节。本文将详细探讨Spring加载顺序,并结合`@PostConstruct`、`构造方法`以及`@Autowired`等关键注解...

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

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

    让spring解决控制springboot中bean的加载顺序的问题.docx

    在Spring Boot应用中,控制Bean的加载顺序是一个关键的议题,尤其是在处理复杂依赖关系或需要在特定时刻执行初始化操作的场景。Spring Boot遵循"约定优于配置"的理念,简化了配置,但同时也带来了需要手动干预Bean...

    java类加载原理分析

    开发者可以通过`-Xbootclasspath`、`-Xbootclasspath/p`和`-Xbootclasspath/a`命令行参数来指定引导类加载器的类路径,从而影响加载顺序或添加额外的类库。 在特殊情况下,如上述示例中的`java -Xbootclasspath/a:...

    Java类加载机制学习1

    这时,自定义类加载器如`ParentLastClassLoader.java`可以帮助我们实现这个目标,通过改变类加载顺序,使得新的类加载器可以加载新的类而不影响旧的代码。 线程上下文类加载器(Thread Context ClassLoader)是Java...

    用 Java 实现堆栈

    无论使用自定义的数组或链表结构,还是使用内置的Stack类,理解堆栈的工作原理和如何在Java中实现它们是每个Java开发者的基本功。通过学习和实践,我们可以更好地利用堆栈这一强大的数据结构来解决复杂的问题。

    Understanding the Java ClassLoader.pdf

    这样可以避免类加载的混乱,确保类和资源的正确加载顺序。 ### 结语 掌握Java类加载器的工作原理和使用技巧对于任何Java开发者来说都至关重要。通过自定义类加载器,开发者不仅能够扩展JVM的功能,还能够优化应用...

    译 Java类加载机制(二)

    自定义类加载器需要继承java.lang.ClassLoader,并重写findClass()或loadClass()方法。 除了基本概念,博客还可能涉及一些进阶主题,如类的全限定名、类的双亲加载与子类加载的顺序、以及类的链接和初始化的区别。...

    自定义struts(实现拦截器)

    自定义Struts时,你需要创建自己的XML配置文件,比如`mystruts.xml`,这个文件将替代或扩展默认的配置,用来加载自定义的Action和拦截器。 2. **Action**: - Action是业务逻辑的载体,它接收用户请求并执行相应的...

    Java类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

    类加载器通常分为系统类加载器和自定义类加载器,系统类加载器包括Bootstrap ClassLoader(负责加载JRE核心库)、Extension ClassLoader(加载扩展库)和App ClassLoader(加载应用程序类路径下的类)。 2. **验证*...

    外部Jar包加载到可执行Jar或War包相关代码

    加载外部Jar到这两种类型的包中,需要考虑到它们的执行环境和加载顺序。 7. **代码示例**: 创建一个简单的自定义类加载器可能如下: ```java public class ExternalJarClassLoader extends ClassLoader { ...

    深入java虚拟机(八)开发自己的类加载器 1

    因此,在设计类加载器时,应考虑如何正确处理类的命名空间和加载顺序,以防止出现冲突。 总的来说,理解并掌握类加载器的原理和实现,不仅可以帮助我们更好地理解JVM的工作方式,还能让我们在遇到特定需求时能够...

    tomcat类加载器

    例如,可以通过修改`common.loader`、`shared.loader`和`context.loader`属性来改变类的加载顺序和来源。 在深入研究"DevLoader"之前,需要查看压缩包内的具体文件,例如org目录下可能包含与DevLoader相关的源代码...

    Java类加载器学习总结.pdf

    Java类加载器是Java虚拟机(JVM)的重要组成部分,它们负责将Java源代码编译后的字节码(.class文件)转化为可执行的内存表示,即`java.lang.Class`对象,进而创建类实例。Java类加载器按照特定的规则进行工作,包括...

    jvm系列一java类的加载机制.doc

    加载阶段允许开发者自定义类加载器,增加了灵活性。 验证阶段是为了确保加载的类信息是正确的,不会危害虚拟机的安全。这一阶段包括文件格式、元数据、字节码和符号引用验证四个子阶段。验证虽然不强制,但对于类的...

    深入理解Java类加载.docx

    Java 类加载机制是Java虚拟机(JVM)的核心组成部分,负责将类的定义从Class文件加载到内存,并对其进行校验、解析和初始化。这个过程确保了程序运行时能够正确使用类的静态和动态特性。本文将深入探讨Java类加载的...

    class-loader测试工程

    这个“class-loader测试工程”可能是为了模拟和测试上述的各种情况,例如测试双亲委派模型、自定义类加载器行为、类的加载顺序以及类加载器之间的关系。通过这样的工程,开发者可以更好地理解和掌握Java平台的类加载...

Global site tag (gtag.js) - Google Analytics