使用 ApplicationDomain 类
ApplicationDomain 类的用途是存储 ActionScript 3.0 定义表。SWF 文件中的所有代码被定义为存在于应用程序域中。 可以使用应用程序域划分位于同一个安全域中的类。这允许同一个类存在多个定义,并且还允许子级重用父级定义。
在使用 Loader 类 API 加载用 ActionScript 3.0 编写的外部 SWF 文件时,可以使用应用程序域。(请注意,在加载图像或用 ActionScript 1.0 或 ActionScript 2.0 编写的 SWF 文件时不能使用应用程序域。)包含在已加载类中的所有 ActionScript 3.0 定义都存储在应用程序域中。加载 SWF 文件时,通过将 LoaderContext 对象的 applicationDomain 参数设置为 ApplicationDomain.currentDomain,可以指定文件包含在 Loader 对象所在的相同应用程序域中。通过将加载的 SWF 文件放在同一个应用程序域中,可以直接访问它的类。如果加载的 SWF 文件包含嵌入的媒体(可通过其关联的类名称访问),或者您要访问加载的 SWF 文件的方法,则这种方式会很有用。如以下示例所示:
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
public class ApplicationDomainExample extends Sprite
{
private var ldr:Loader;
public function ApplicationDomainExample()
{
ldr = new Loader();
var req:URLRequest = new URLRequest("Greeter.swf");
var ldrContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
ldr.load(req, ldrContext);
}
private function completeHandler(event:Event):void
{
ApplicationDomain.currentDomain.getDefinition("Greeter");
var myGreeter:Greeter = Greeter(event.target.content);
var message:String = myGreeter.welcome("Tommy");
trace(message); // Hello, Tommy
}
}
}
使用应用程序域时,还要记住以下几点:
SWF 文件中的所有代码被定义为存在于应用程序域中。 主应用程序在“当前域”中运行。“系统域”中包含所有应用程序域(包括当前域),也就是,它包含所有 Flash Player 类。
所有应用程序域(除系统域外)都有关联的父域。主应用程序的应用程序域的父域是系统域。已加载的类仅在其父级中没有相关定义时才进行定义。不能用较新的定义覆盖已加载类的定义。
下图显示了某个应用程序在单个域 (domain1.com) 中加载多个 SWF 文件的内容。根据加载内容的不同,可以使用不同的应用程序域。紧跟的文本说明用于为应用程序中的每个 SWF 文件设置适当应用程序域的逻辑。
主应用程序文件为 application1.swf。它包含从其它 SWF 文件加载内容的 Loader 对象。在此方案下,当前域为 Application domain 1。用法 A、用法 B 和用法 C 说明了为应用程序中的每个 SWF 文件设置适当应用程序域的不同方法。
用法 A:通过创建系统域的子级划分子级 SWF 文件。在示意图中,Application domain 2 创建为系统域的子级。application2.swf 文件在 Application domain 2 中加载,因此其类定义从 application1.swf 中定义的类中划分出来。
此方法的一个用处是使旧版应用程序能够动态加载相同应用程序的更新版本,而不会发生冲突。之所以不发生冲突,是因为尽管使用的是同样的类名称,但它们划分到不同的应用程序域中。
以下代码将创建作为系统域子级的应用程序域:
request.url = "application2.swf";
request.applicationDomain = new ApplicationDomain();
用法 B:在当前类定义中添加新的类定义。module1.swf 的应用程序域设置为当前域 (Application domain 1)。这可让您将新的类定义添加到应用程序的当前一组类定义中。这可用于主应用程序的运行时共享库。加载的 SWF 被视为远程共享库 (RSL)。使用此方法可以在应用程序启动之前使用预加载器加载 RSL。
以下代码将某应用程序域设置为当前域:
request.url = "module1.swf";
request.applicationDomain = ApplicationDomain.currentDomain;
用法 C:通过创建当前域的新子域,使用父级的类定义。module3.swf 的应用程序域是当前域的子级,并且子级使用所有类的父级的版本。此方法的一个用处可能是作为一个使用主应用程序的类型的多屏幕丰富 Internet 应用程序 (RIA) 模块,该模块作为主应用程序的子级加载。如果能够确保所有类始终更新为向后兼容,并且正在加载的应用程序始终比其加载的软件的版本新,则子级将使用父级版本。如果可以确保不继续拥有对子级 SWF 的引用,则拥有了新的应用程序域还使您能够卸载所有的类定义以便于垃圾回收。
此方法使加载的模块可以共享加载者的 singleton 对象和静态类成员。
以下代码将创建当前域的新子域:
request.url = "module3.swf";
request.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
http://livedocs.adobe.com/flash/9.0_cn/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000327.html
分享到:
相关推荐
在Adobe Flash AS3编程中,`ApplicationDomain`是一个重要的概念,它主要用于管理类的加载和访问控制,同时也为运行时安全机制提供了支持。在AS3中,每一个运行中的SWF文件都处于一个或多个`ApplicationDomain`之中...
- ApplicationDomain还负责管理类的加载过程。当加载一个新类时,Flash Player会先检查当前的应用程序域是否有这个类,如果没有,则会向上级应用程序域查找。 **3. 示例** ```as3 var parentAppDomain:Application...
3. 类的隔离:不同ApplicationDomain之间的类是隔离的,这意味着一个域中的类无法直接访问另一域中的类,除非通过特定的接口或对象传递。 在Flex中,通常在处理模块(Module)时会用到ApplicationDomain。模块可以...
### 深入理解ApplicationDomain和SecurityDomain #### 安全域(Security Domain)与应用程序域(Application Domain)概述 安全域与应用程序域是Flash Player中两种重要的沙箱概念,它们帮助开发者理解如何管理和...
17. **ApplicationDomain 类**:ApplicationDomain 类用于管理类的命名空间,允许在多个沙箱或安全域之间共享类定义。 18. **arguments 对象**:在函数内部,arguments 对象提供对函数调用时传入的所有参数的访问,...
在本节中,我们将深入探讨如何使用Flash中的共享资源库(Shared Library)来优化和管理项目中的...同时,通过Loader类和ApplicationDomain类的方法,我们可以动态地加载和使用这些共享资源,使得程序具有更高的灵活性。
WebLogic的主要类加载器包括Bootstrap类加载器、Extension类加载器、Application类加载器以及Domain类加载器等。 2. **Bootstrap类加载器** Bootstrap类加载器是JVM的一部分,负责加载JDK的核心类库,如rt.jar,这...
《深入探索:强大的.NET逆向工具及其应用》 在.NET框架的世界里,逆向工程是一项至关重要的技术,它使得...随着.NET技术的不断发展,这类工具将继续扮演着不可或缺的角色,为开发者提供更全面的视角和更强的分析能力。
SystemManager不仅负责控制Flex应用的基本元素,如应用窗口、Application实例、弹出窗口和光标,还负责管理ApplicationDomain中的类加载和执行。下面将详细讨论SystemManager的主要功能和工作流程。 1. **应用窗口...
1. 创建一个新的`LoaderContext`对象,设置其`applicationDomain`属性为新的`ApplicationDomain`实例,这样加载的SWF文件将拥有独立的类加载环境。 2. 使用`Loader`类加载含有独立任务的SWF文件。 3. 在加载的SWF...
通过使用`ApplicationDomain.currentDomain`或新建`ApplicationDomain`实例,开发者可以灵活地决定子SWF的定义应当放置在何处,从而实现对继承关系和资源访问的精细控制。 #### 结论 理解Flash应用程序域对于任何...
7. **flash.system**:系统级的类,比如ApplicationDomain用于管理类域,Security用于处理安全策略。 这个PDF结构图可能会通过图形化的方式展示这些包和类之间的继承关系,以及它们的职责。比如,你可以看到...
这是因为AS3引入了`ApplicationDomain`类,它可以更直接地访问和使用另一SWF中的类和函数,无需预先定义。 **LocalConnection的优势与局限:** - **优势**:兼容性强,支持AS1、AS2和AS3之间的通讯。 - **局限**:...
2. **加载时指定类名**:在使用Loader加载SWF时,通过设置LoaderContext的applicationDomain属性,我们可以告诉Loader如何查找并实例化SWF中的特定类。例如,如果我们知道SWF中有一个名为"MyComponent"的类,我们...
1.9.3 修改application.yml文件的切换方式代理方式 1.9.4 测试类 1.9.5 测试结果 写法二: public static final String POINT_CUT = "execution(* com.bjpowernode.springboot03aop.domain.Man.*(..))"; @Before...
Spring Boot的自动配置和组件扫描机制在这里起作用,根据`@SpringBootApplication`注解的类和其他配置,构建并初始化SpringApplicationContext。 7. **服务启动**: SpringApplicationContext启动后,它会创建并...
通过设置`LoaderContext`的`applicationDomain`属性,可以控制加载的SWF是否能访问主SWF的类和变量: ```actionscript var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); ...