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

自定义类加载器loadClass

阅读更多

自定义类加载器继承ClassLoader类,使用自定义类加载器是通过loadClass方法实现。

       protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { // 查找类是否已经加载

                Class c = findLoadedClass(name);

                if (c == null) {

                try { if (parent != null) { //存在父类,先委托父类进行加载

                             c = parent.loadClass(name, false);

                       } else { /*没有父类,则委托引导类加载器,委托机制是出于安全考虑,详细可见《深入java虚拟机第二版》,这个loadClass方法没有用到final修饰符,也就是用户可以重载它,不需要用这个委托机制?*/

                            c = findBootstrapClass0(name);

                      }

               } catch (ClassNotFoundException e) { // findClass自定义加载器会重写这个方法

                c = findClass(name);

               }

              if (resolve) { //对类进行解析

                   resolveClass(c);

              }

              return c;

       }

       上面的finaLoadedClass方法会调用到share/vm/prims/jvm.cpp的JVM_FindLoadedClass方法,

       JVM_FindLoadedClass(JNIEnv *env, jobject loader, jstring name)) {

           .......

           klassOop k = SystemDictionary::find_instance_or_array_klass(klass_name, h_loader, Handle(), CHECK_NULL);

      }

      上面会调用到

       klassOop SystemDictionary::find(symbolHandle class_name, Handle class_loader, Handle protection_domain, TRAPS) {

             unsigned int d_hash = dictionary()->compute_hash(class_name, class_loader);

             int d_index = dictionary()->hash_to_index(d_hash);

            {

                   No_Safepoint_Verifier nosafepoint;

                   return dictionary()->find(d_index, d_hash, class_name, class_loader,protection_domain, THREAD);/*这个方法根据类名、类加载器及访问权限来查找这个类是否已经加载,同一个类如果是两个类加载器加载,在虚拟机里面会存在两个对象。*/

            }

    }

分享到:
评论

相关推荐

    自定义Java类加载器demo

    自定义Java类加载器demo,自定义了一个classLoader,重写了loadClass 和findClass,注意 loadClass打破了双亲委派机制,所有的类都要在自定义的class文件中找到,而findClass遵循了双亲委派机制

    Android中动态载入自定义类

    通过DexClassLoader类加载器来解析优化前面的dex文件 通过DexClassLoader的loadClass函数来载入类 通过获得到的类的newInstance函数来生成需要的对象 开始使用获取到的动态类对象~\(≧▽≦)/~啦啦啦

    DynamicNativeAgent:在没有工具或自定义类加载器的情况下重新定义Java类

    DynamicNativeAgent DynamicNativeAgent可以使用本机库重新定义Java类(无需类加载器或Instrumentation)用法AgentFactory . loadNative(); // Load the native in the JVMNativeAgent agent = AgentFactory . ...

    应用启动页自定义跳转计时器View Demo

    应用启动页自定义跳转计时器View Demo: CircleTextProgressbar.java: package com.demo.startpageskiptimerdemo.widget; import android.content.Context; import android.content.res.ColorStateList; import ...

    MicroPHP(蜗牛微型PHP框架) v2.3.3.zip

    项目控制器、模型、视图、类库等各种文件夹完全自定义,都不是必需的,用到什么就建立什么文件夹,彻底摆脱一堆无用的一大堆文件夹的困扰。 类库懒加载 类库采用懒加载模式,只在需要时才包含类库,而不是一次全部...

    light-jpf:轻量级Java插件框架

    特点简单的API 使用自定义Java类加载器进行沙箱测试使用Maven构建插件2.用法2.1创建插件创建实现ljpf.Plugin接口的Plugin类。 public class CustomPlugin implements Plugin { @Override public void load () { ... ...

    汪文君高并发编程实战视频资源全集

    │ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下世界.mp4 │ 高并发编程第二阶段50讲、ClassLoader父委托机制详细介绍.mp4 │ 高并发编程第二阶段51讲、加密解密类加载实战演示.mp4 │ 高...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段49讲、自定义类加载器ClassLoader顺便问候了一下世界.mp4 │ 高并发编程第二阶段50讲、ClassLoader父委托机制详细介绍.mp4 │ 高并发编程第二阶段51讲、加密解密类加载实战演示.mp4 │ 高...

    J2EE应用开发详解

    29 3.2.2 Class.forName()加载类的实例 30 3.2.3 loadClass获得类的实例 31 3.3 操作类的字段 31 3.3.1 获取对象的属性 31 3.4 操作类的方法 34 3.4.1 运行时调用对象的方法 34 3.4.2 无参构造函数 36 3.4.3 带参...

    ASP.NET的网页代码模型及生命周期

    ASP.NET单文件页模型在创建并生成时,开发人员编写的类将编译成程序集,并将该程序集加载到应用程序域,并对该页的类进行实例化后输出到浏览器。可以说,.aspx页面的代码也即将会生成一个类,并包含内部逻辑。在...

    as3比较详尽的工具类

    XMLLoader.as ---------------------- 加载xml的类 xmlToArray.as ---------------------- xml转换Array util: ArrayUtil.as ---------------------- 数组辅助功能 setFrameout.as ---------------------- ...

    Spring中文帮助文档

    3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 ...

    WordPress主题 大前端 阿里百秀 XIU ALIBAIXIU 小清新CMS高级主题[更新v3.2]

    图片和头像提速:文章列表和头像都使用了lazyload做按需异步加载,你会发现访问速度上提升一大截 2种可选框架:支持3栏和2栏 13种可选颜色风格:基本上小清新的颜色都有了 3种列表模式:多图展示、单图展示、无图展示 7...

    Spring API

    3.12.3. 使用过滤器自定义扫描 3.12.4. 自动检测组件的命名 3.12.5. 为自动检测的组件提供一个作用域 3.12.6. 用注解提供限定符元数据 3.13. 注册一个LoadTimeWeaver 4. 资源 4.1. 简介 4.2. Resource接口 ...

    苹果8XPC和手机二合一完整版

    {maccms:load label.html} 载入自定义页面内容 {maccms:getlink label.html} 获取自定义页面的链接 {maccms:siteaid} 当前所在系统模版id 视频首页 10 视频地图页 11 视频分类,筛选页 12 视频专题首页 13 ...

    ssh(structs,spring,hibernate)框架中的上传下载

    TfileDAOHibernate通过扩展Spring提供的Hibernate支持类HibernateDaoSupport而建立,HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute...

    Wordpress 博客主题/模板 阿里百秀XIU主题 2.1最新版CMS高级主题

    图片和头像提速:文章列表和头像都使用了lazyload做按需异步加载,你会发现访问速度上提升一大截 2种可选框架:支持3栏和2栏 13种可选颜色风格:基本上小清新的颜色都有了 3种列表模式:多图展示、单图展示、无图展示 7...

    ZendFramework中文文档

    13.8. 自定义Feed和条目类 14. Zend_Filter 14.1. 简介 14.1.1. 什么是过滤器(filter)? 14.1.2. 过滤器的基本用法 14.1.3. 使用静态 get() 方法 14.2. 标准过滤器类 14.2.1. Alnum 14.2.2. Alpha 14.2.3. ...

    asp.net知识库

    关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...

    Smarty中文手册 chm版

    $compiler_class [编译类变量] $request_vars_order [变量顺序变量] $request_use_auto_globals [自动全局变量] $compile_id [编译id变量] $use_sub_dirs [子目录变量] $default_modifiers [默认修正器变量] $...

Global site tag (gtag.js) - Google Analytics