首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何扩展加载的swf中的类

扩展加载的SWF中的类,可以通过以下几种方法:

  1. 使用Loader类:

使用Loader类可以动态地加载和实例化一个SWF文件,并将其添加到显示列表中。可以使用Loader类的load()方法来加载SWF文件,并在加载完成后使用contentLoaderInfo属性来访问加载的SWF文件中的类。

示例代码:

代码语言:txt
复制
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.load(new URLRequest("path/to/swf/file.swf"));

function onLoadComplete(event:Event):void {
    var loadedSwf:DisplayObject = event.target.content;
    addChild(loadedSwf);
    var MyClass:Class = event.target.applicationDomain.getDefinition("MyClass") as Class;
    var myInstance:MyClass = new MyClass();
}
  1. 使用ApplicationDomain类:

使用ApplicationDomain类可以在加载SWF文件时将其加载到当前应用程序域中,从而可以访问其中的类。可以使用ApplicationDomain类的getDefinition()方法来获取加载的SWF文件中的类。

示例代码:

代码语言:txt
复制
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
loader.load(new URLRequest("path/to/swf/file.swf"));

function onLoadComplete(event:Event):void {
    var loadedSwf:DisplayObject = event.target.content;
    addChild(loadedSwf);
    var MyClass:Class = event.target.applicationDomain.getDefinition("MyClass") as Class;
    var myInstance:MyClass = new MyClass();
}
  1. 使用addChild()方法:

使用addChild()方法可以将加载的SWF文件添加到显示列表中,从而可以访问其中的类。可以使用addChild()方法将加载的SWF文件添加到当前显示对象中,并使用getChildAt()方法获取加载的SWF文件对象。

示例代码:

代码语言:txt
复制

var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);

loader.load(new URLRequest("path/to/swf/file.swf"));

function onLoadComplete(event:Event):void {

代码语言:txt
复制
var loadedSwf:DisplayObject = event.target.content;
代码语言:txt
复制
addChild(loadedSwf);
代码语言:txt
复制
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* var MyClass:Class = getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt(0).getChildAt
*/
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android 逆向】加载器 ClassLoader ( 启动加载器 | 扩展加载器 | 应用加载器 | 加载双亲委托机制 )

C/C++ 实现 , 加载 Java 核心库 , 如 java.lang 包下系统 ; Java 无法和获取 ; Extention ClassLoader : 扩展加载器 , 加载 /lib.../ext 下 , Java 可以获取 , 其实现为 ExtClassLoader ; Application ClassLoader : 应用加载器 , 加载开发者开发 , Java 可以通过...程序才能开始执行 ; 二、加载双亲委托机制 ---- 加载器级别 : 权限 / 重要性 从高到低排列 ; 启动加载器 Bootstrap ClassLoader 扩展加载器 Extention...ClassLoader 应用加载器 Application ClassLoader 自定义加载器 Custom ClassLoader 在双亲委托机制 , 上层加载器 是 下层加载...无法 被替代 , 系统只能由 启动加载器 Bootstrap ClassLoader 加载 , 应用加载加载被篡改 Java 核心是无效 ;

87030

如何加载

在 Java 加载流程有一个专门机制叫做“加载机制”。加载机制是指一个在 Java 虚拟机(JVM)执行流程,它也是 Java 程序能够正常执行关键所在,那它具体执行流程是啥?...流程概述 在 JVM 加载会经历以下 5 个阶段: 加载阶段(Loading) 验证阶段(Verification) 准备阶段(Preparation) 解析阶段(Resolution) 初始化阶段...1.加载阶段 简单来说,加载阶段就是将文件加载到内存过程。...2.1 验证阶段 验证阶段也叫做校验阶段,它主要是用来验证加载到内存是否是安全合规文件,验证主要动作大概有以下几个(当然,以下细节如果实在记不住也没关系): 文件格式校验包括常量池中常量类型...符号引用和直接引用有一个重要区别:使用符号引用时被引用目标不一定已经加载到内存;而使用直接引用时,引用目标必定已经存在虚拟机内存中了。

50930
  • Java 在 Tomcat 如何加载

    一、加载 在JVM并不是一次性把所有的文件都加载到,而是一步一步,按照需要来加载。 比如JVM启动时,会通过不同加载加载不同。...当用户在自己代码,需要某些额外时,再通过加载机制加载到JVM,并且存放一段时间,便于频繁使用。 因此使用哪种类加载器、在什么位置加载都是JVM重要知识。...JVM包括集中加载器: BootStrapClassLoader 引导加载器 ExtClassLoader 扩展加载器 AppClassLoader 应用加载器 CustomClassLoader...当Tomcat启动时,会创建几种类加载器: 1、Bootstrap 引导加载加载JVM启动所需,以及标准扩展(位于jre/lib/ext下) 2、System 系统加载加载Tomcat...WEB-INF/lib中加载 5、使用common加载器在CATALINA_HOME/lib中加载 四、问题扩展 通过对上面Tomcat加载机制理解,就不难明白 为什么Java文件放在Eclipse

    2.5K20

    JVM加载过程

    前面看了加载时机,本文来记录下加载过程,也就是加载每个阶段都做了哪些事情 生命周期 ?...加载   "加载"是加载过程一个阶段,在这个阶段虚拟机做了3件事 通过一个全限定名获取定义此类二进制流 通过这个字节流所代表静态存储结构转化为方法区运行时数据结构 在内存中生成一个代表这个...java语言规范要做 a.这个是否有父 b.这个是否继承了不允许继承(final修饰) c.非抽象,是否实现了父及接口中所有的抽象方法 d.字段,方法是否和父产生矛盾...方法对于或接口来说并不是必需。如果一个没有静态语句块也没有对变量赋值操作,那么编译器可以不为这个生成方法。...接口实现在初始化时候一样不会执行方法 同一个只会被加载一次,/()方法也只会执行一次,如果多线程环境只会有一个线程执行方法,其他线程需要等待其执行完成。

    51430

    JVM加载

    加载器   把加载阶段"通过一个全限定名来获取描述此类二进制字节流"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要,实现这个动作代码模块称为加载器。...双亲委派模型   通过ClassLoaderloadClass方法我们发现加载器加时候有既定原则,而且系统提供加载器好像也不止一个,我们就来说下这块。...(rj.jar) ,无法被java程序直接是使用 2 扩展加载器Extension ClassLoader 负责加载 \lib\ext目录或者被java.ext.dirs指定目录下库...: C:\Program Files\Java\jre1.8.0_144\lib\ext; C:\Windows\Sun\Java\lib\ext 我们也可以将自己文件打成jar包放到扩展目录下,也会被扩展加载加载...,它首先不会自己去尝试加载这个,而是把这个请求委派给父加载器完成,每一个层次加载器都是如果,因此所有的加载请求最终都应该传递到顶层启动加载 当父加载器反馈无法加载该类时(搜索范围没有找到所需

    46160

    PHP自动加载

    PHP自动加载 在之前,我们已经学习过Composer自动加载原理,其实就是利用了PHP自动加载特性。在文末有该系列文章链接。...PHP自动加载主要依靠是__autoload()和spl_autoload_register()这两个方法。今天我们就来简单看一下这两个方法使用。...我们在__autoload()方法只需要去include这个所在文件即可。 spl_autoload_register() 这个方法目前已经替代了上述魔术方法自动加载功能。...它是spl扩展一个方法,spl扩展库现在已经默认集成在了PHP,大家可以放心地直接使用。...这样,你就不需要将所有加载代码都写在一个__autoload()方法,而是可以使用多个spl_autoload_register()去单独进行每个加载处理。

    1.3K10

    Codeigniter对核心扩展

    Codeigniter框架提供了实现多个应用Application方法,如参考资料[2]描述,这种方法实际上是在网站目录下存在多个入口文件和Application文件夹方式。...Controller文件需要一些公共方法,在Codeigniter,当我们需要在所有的控制器Controller添加一些公共方法时,可以考虑对Controller进行扩展。...例如用户登录检查函数,具体方法我们可以参考[1]描述。如果我前台页面不需要检查登录,后台页面需要检查登录,使用这种方法就会有问题。...扩展核心实现代码,位于System/Core/Codeigniter.php第214行,代码如下: 1: if (file_exists(APPPATH.'core/'....版本能够有些改善。

    1.9K20

    Chrome、FF在swf处理问题小记

    当时需求是点击网页装扮时候会弹出一个层,层内有很多TAB选项卡,而有一个对图片处理swf(让用户选择一张图片、编辑图片)放在其中一个选项卡,而当来回切换tab选项卡时候,swf会被重新加载。...后面在小组内我记得有总结过FF下什么情况下会触发swf重新渲染: 1、将swf元素display属性由none切换至block时; 2、将swf元素由页面内完全不可见区域移动可见区域时(这一点现在需要再次证实一下...由于最近很长时候已经将重心转到flash相关开发上,所以对于网页遇到一些问题,我能不过问都不会去仔细看。...但最近在将游戏接入新浪微博微游戏平台时,遇到了一个问题:就是点击游戏内(flash)一个按钮,调用页面js函数,这个时候会将swf隐藏(none掉了,因为swf不能设置它wmode为transparent...出现此问题原因,以前查过相关资源,好像是说ff和chrome这一浏览器,在加载和渲染flash时候使用了延后处理技术,对flash支持也没有像IE那样好。

    1.6K30

    Java加载分析与理解!详细解析加载过程

    加载过程 JVM加载过程分为三步: 装载: Load 链接: Link 初始化: Initialize 装载 查找并加载二进制数据 链接 验证: 确保加载正确性 准备: 为静态变量分配内存...JVM启动时标明启动时,即文件名和名相同 初始化步骤 如果这个还没有被加载和链接,就首先进行装载和链接 如果这个存在直接父,并且这个还没有被初始化(在一个加载,只能初始化一次...这个情况不适用于接口 加入存在初始化语句,比如static变量或者static块, 就执行这些初始化语句 加载 加载过程 将 .class文件二进制数据 读入到内存 将这些数据放在运行时数据区方法区内...加载器 Java加载是通过ClassLoader及其子类来完成 Bootstrap ClassLoader 负责加载 $JAVA_HOMEjre/lib/rt.jar里所有的class, 由...C++ 实现,不是ClassLoader Extension ClassLoader 负责加载Java平台中扩展功能一些jar包,包括 $JAVA_HOMEjre/lib/*.jar或者 -Djava.ext.dirs

    62920

    Dubbo源码解析之SPI(一):扩展加载过程

    1.2 JDK SPI小栗子 SPI 实现方式是将接口实现全限定名配置在文件,由服务加载器读取配置文件,加载实现。 了解了概念后,来看一个具体例子。...实现懒加载方式,当运行方法时候创建空map。在真正获取时先从缓存查找具体实现class对象,找得到就直接返回、找不到就根据配置文件加载并缓存。 Dubbo又是如何实现呢?...这段代码也不复杂,如果传入参数为'true',则返回默认扩展实例;否则,从缓存获取实例,如果有就从缓存获取,没有的话就新建。...这里缓存是一个扩展名和class关系。这个扩展名就是在配置文件key。创建之前,先缓存了一下接口限定名。加载配置文件路径是以下这几个。 ? 2)loadDirectory方法 ?...当然不是,这篇只拆解了扩展加载过程,DubboSPI还有个很复杂扩展点-自适应机制。

    90231

    加载

    概念 加载 加载:将class文件字节码内容加载到内存,并将这些静态数据转换成方法区运行时数据结构,然后生成一个代表这个java.lang.Class对象 链接:将Java二进制代码合并到...构造器()方法是由编译期自动收集所有变量赋值动作和静态代码块语句合并产生。...比如:当通过子类引用父静态变量,不会导致子类初始化 通过数组定义引用,不会触发此类初始化 引用常量不会触动此类初始化(常量在链接阶段就存入调用常量池中了) 加载作用 将class文件字节码内容加载到内存...,并将这些静态数据转换成方法区运行时数据结构,然后在堆中生成一个代表这个java.lang.Class对象,作为方法区数据访问入口。...缓存 标准JavaSE加载起器可以按要求查找,但一旦某个加载加载,它将维持加载(缓存)一段时间。

    27710

    加载器与加载过程

    加载器子系统作用 加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定文件标识。...使用魔数而不是扩展名来识别Class文件,主要是基于安全方面的考虑,因为文件扩展名可以随意更改。...除了信息外,方法区还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分内存映射) 加载器ClasLoader角色 class file存在于本地硬盘上...Class文件字节流包含信息符合当前虚拟机要求,保证被加载正确性,不会危害虚拟机自身安全。...此方法不需定义,是javac编译器自动收集所有变量赋值动作和静态代码块语句合并而来。 构造器方法中指令按语句在源文件中出现顺序执行。 ()不同于构造器。

    17530

    从Java加载机制谈起:聊聊Java如何实现热部署(热加载

    1、有启动加载加载类型在整个运行期间是不可能被卸载(jvm和jls规范). 2、被系统加载器和标准扩展加载加载类型在运行期间不太可能被卸载,因为系统加载器实例或者标准扩展实例基本上在整个运行期间总能直接或者间接访问到...本文将探索如何在不破坏 Java 虚拟机现有行为前提下,实现某个单一热部署,让系统无需重启就完成某个更新。...另一种友好方法是创建自己 classloader 来加载需要监听 class,这样就能控制加载时机,从而实现热部署。本文将具体探索如何实现这个方案。...这里却存在一个问题,同一个加载器无法同时加载两个相同名称,由于不论结构如何发生变化,生成名不会变,而 classloader 只能在虚拟机停止前销毁已经加载,这样 classloader...与动态加载器不一样,JRebel保留了所有现有的对象和标识和状态,允许开发者继续使用他们应用而不会产生延迟。 如何使之生效?

    3.2K20

    tomcat学习|tomcat加载

    java里面的加载器 我们在写java代码时,源文件是 *.java , 然后经过编译之后,会变成 .class 文件,加载加载,实际上就是.class文件, 在实际开发,我们会把相关 ....Extension Class Loader java提供一个标准扩展机制,用于加载除核心库外jar包.默认扩展目录是 %JAVA_HOME%/jar/lib/ext ?...tomcat加载器 总共有四种加载器: Common Class Loader, Catalina Class Loader , Shared Class Loader, Web AppClass...Loader. tomcat各个加载器初始化,声明地方 /** * 初始化tomcat三大加载器 */ private void initClassLoaders...(web应用)都使用独立ClassLoader,加载我们web应用,WEB-INFO/libs 这个目录下jar(如我们在应用引用spring , mybatis 这些包) 这个做好处是,不同

    81820

    JAVA内容先后加载顺序

    静态代码块 静态代码块在加载时候执行,并且只执行一次,它优先级是最高,在构造代码块和构造函数和main方法之前。如果有多个静态代码块,按代码编写顺序执行。...静态代码块只能在里,不能在方法里,对于静态方法:在加载时候,静态方法也已经加载了,但是我们必须要通过名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行,而静态方法是被动运行...在java普通函数可以和构造函数同名,但是必须带有返回值;   (2)构造函数功能主要用于在对象创建时定义初始化状态。它没有返回值,也不能用void来修饰。...普通代码块 普通代码块是在方法体定义。且普通代码块执行顺序和书写顺序一致。 2. 实例化执行顺序 a....执行结果 根据上面的代码可以看到,我们main方法、构造代码块、静态代码块都是没有顺序放置,但是在输出结果里可以看到他们执行是有固定顺序,看下图: 在开发过程可以根据具体业务去定义如何使用静态代码块

    59730

    【Java】探究Java加载

    在Java编程世界加载器是一个重要概念,它扮演着将加载到Java虚拟机并执行关键角色。本文将深入探讨加载原理、类型以及在Java开发应用。 1. 加载器是什么?...加载器(ClassLoader)是Java虚拟机(JVM)一部分,负责将文件加载到JVM,以便运行Java程序。...扩展加载器(Extension Class Loader):负责加载Java扩展库,位于$JAVA_HOME/jre/lib/ext目录下。...加载应用场景 动态加载:通过自定义加载器,可以实现动态加载功能,实现模块化开发和扩展。...加载器泄漏:在使用自定义加载器时,需要注意避免内存泄漏问题,及时释放不再使用加载器。 结语 加载器作为Java虚拟机核心组件之一,承担着将加载到内存并执行重要任务。

    11110

    Java加载工作原理

    本文会从以下3点来介绍”Java加载器: 1. 加载概述. 2. 加载分类. 3. 加载机制....首先, 我们先来聊下加载概述, 加载器(ClassLoader)是负责加载对象, 也就是将.class字节码文件加载到JVM内存. 那它什么时候才会去加载.class字节码文件呢?...答案是: 当Java程序第一次使用某个内容, 而该类字节码文件在内存不存在时, 加载器就会去加载该类字节码文件. 俗话说”渡人先渡己”, 要想成为别人榜样, 帮助别人....生活如此, 加载器也一样. 要想加载我们自定义, 加载器必须先完成”自加载过程. 聊到这, 不得不提就是”加载分类”了. Java加载器主要分为以下四: 1....扩展加载器(ExtensionClassLoader), 主要负载加载 jre/lib/ext/*.jar 这些jar包.

    52310

    java加载过程和加载分析

    那JVM是如何来让我们写java文件运行呢?    这个问题通常问法好像是:如何加载。   ...记得第一次遇见这个问题时候,同学给我回答是: 1.虚拟机会加载JDK里核心包 2.虚拟机会加载JDK里扩展包 3.虚拟机会加载JDK里系统包 4.虚拟机再会加载我们写好java。...再次之前我想补充一个名词解释,加载器:虚拟机把  实现 加载阶段“通过一个全限定名来获取描述此类二进制字节流” 这个过程代码称为加载器 1....是所有,这种感脚~),然后它就会调用自己findClass方法来自启动加载 ; 2.标准扩展加载器启动时就会借助其父 启动加载器 作为父加载器 来启动了; 3.系统加载器启动时就会借助其父...5.初始化 初始化阶段是加载过程最后一步,这才是执行定义java程序代码(也可以说是字节码)。

    1.5K80
    领券