`

FLEX 反射

    博客分类:
  • flex
阅读更多
import flash.utils.getDefinitionByName;

import flash.utils.getQualifiedClassName;

import flash.utils.getQualifiedSuperclassName;

 

1.获取实例的类名:
public function getQualifiedClassName(value:*):String
1.获取实例的超类
public function getQualifiedSuperclassName(value:*):String

 

3.通过类的名字获取到Class对象
public function getDefinitionByName(name:String):Object

4.通过Class对象获取实例

比如
var cls:Class =getDefinitionByName(“mx.controls::TextInput”) as Class;

var txtinput:TextInput =new cls() as TextInput;

txtinput.text=“test”;

co1.addChild(txtinput);

 

5.获取类的信息:字段、方法

public function describeType(value:*):XML
生成一个 XML 对象来描述参数中指定的 ActionScript 对象, 这个方法使 ActionScript 实现了反射编程的概念.

1.

var dummy:Dummy = new Dummy();
var instanceInfo:XML = describeType(dummy);
var properties:XMLList = instanceInfo..accessor.(@access != ”writeonly”) + instanceInfo..variable;
for each (var propertyInfo:XML in properties) …{
    var propertyName:String = propertyInfo.@name;
    trace(dummy[propertyName]);
}
 

2.

var sprite1:Sprite = new Sprite();
var instanceInfo:XML = describeType(sprite1);

 

3.

package
…{
    import flash.utils.describeType;
    import flash.utils.getQualifiedClassName;
    import flash.utils.getDefinitionByName;
    
    /** *//**
     * 使用 flash.utils.describeType 获取类详细信息并缓存
     * @author kakera
     * 
     */
    public class TypeDescriptor
    …{
        
        /** *//**
        * 缓存已经反射过了的对象
        */
        private static var typeCache:Object = new Object();

        
        
        /** *//**
         * 获取类信息
         * @param target 要获取的目标对象
         * @return TypeDescriptorEntry 实例
         * 
         */
        public static function describeType (target:*):TypeDescription …{

            var className:String = getQualifiedClassName(target);            

            /** *//**
            * 检查缓存中是否已经有目标对象项, 如果有就返回缓存中的内容
            */
            if (className in typeCache)
                return typeCache[className];
                
            
            /** *//**
            * 暂存属性列表
            */
            var propertyNames:Array = [];
            

            /** *//**
            * 获取类信息, 如果传入的是实例则获取实例类型的类信息
            */
            var typeInfo:XML = flash.utils.describeType(target is Class ? target : getDefinitionByName(className) as Class);
            
            
            /** *//**
            * 获取类中所有的属性和访问器
            */
            var properties:XMLList = typeInfo.factory..accessor.(@access != ”writeonly”) + typeInfo..variable;

            
            /** *//**
            * 遍历并存放到 propertyNames 中
            */
            for each (var propertyInfo:XML in properties)
                propertyNames.push(propertyInfo.@name);
                
            
            /** *//**
            * 创建 TypeDescriptorEntry 的实例并把 propertyNames 等属性丢进去
            */
            var entry:TypeDescription = new TypeDescription();
            entry.name = className;
            entry.properties = propertyNames;
            entry.typeInfo = typeInfo;
            
            
            /** *//**
            * 缓存到 typeCache 中以便下次从缓存中读取
            */
            typeCache[className] = entry;
            
            return entry;
        }
     
        /** *//**
         * 静态类无须实例化
         * @return 
         * 
         */
        public function TypeDescriptor () …{ }
    }
}

TypeDescription.as, 负责保存信息

package
…{
    
    public class TypeDescription
    …{
        
        /** *//**
        * 类的属性列表, 包括访问器 (accessor) 和变量 (variable)
        */
        public var properties:Array; /**//* of String */
            
        
        /** *//**
        * 类名
        */
        public var name:String;
        

        /** *//**
        * 由 flash.utils.describeType() 获取的原始 XML 数据
        */
        public var typeInfo:XML;
        

        public function TypeDescription () …{ }
    }
}

 

more:http://www.ibm.com/developerworks/cn/web/0908_liuqing_flex_reflect/index.html

thanks:http://www.javagod.cn/html/y2009/256_flex-%E5%8F%8D%E5%B0%84%E8%B5%84%E6%96%99%E4%BB%A3%E7%A0%81%E6%B3%A8%E9%87%8A.html

分享到:
评论
1 楼 小菜菜 2010-04-15  

相关推荐

    Flex 反射示例

    Flex反射是Adobe Flex框架中的一个重要特性,它允许在运行时检查和操作类、对象、方法、属性等元数据。在Flex编程中,反射提供了一种动态访问和操作应用程序组件的能力,即使在编译时未知其具体类型的情况下也可以...

    Flex 开发类的反射

    ### Flex开发中的类反射技术详解 #### 引言 随着Flex技术在富互联网应用(RIA)领域的广泛应用,其独特的能力,如强大的图形处理能力和高效的数据处理机制,使其成为开发高性能Web应用的首选工具之一。Flex的灵活...

    flex特效编辑器 开发flex游戏的利器

    光线效果对于创造真实感和氛围至关重要,例如,它可以模拟阳光、聚光灯或者环境反射等,提升游戏的沉浸感。 在学习和使用Flex特效编辑器时,开发者应掌握基本的Flex编程知识,了解ActionScript和MXML,这是Flex应用...

    C#与flex交互

    - C#可以通过反射或委托机制来调用Flex中的方法。在C#端创建一个委托,对应Flex中的方法签名,然后在需要调用Flex方法时,通过Flash控件发送消息到Flex端,由Flex端的事件监听器接收并执行相应的方法。 5. **通信...

    Flex前端与Java服务端交互反射机制.doc

    《Flex前端与Java服务端交互反射机制》 在软件开发中,前端与后端的交互是必不可少的一部分。本文主要探讨了使用Flex作为富互联网应用程序(RIA)前端与Java服务端进行交互的反射机制。Flex以其丰富的用户体验和...

    Flex开源项目

    8. **ReflexUtil**: 一个反射组件类,可用于动态操作和检查Flex对象。 9. **flex-object-handles**: 提供对象处理功能,通过XML配置实现对象的操作,但可能需要根据具体需求进行定制。 10. **CheckboxTree 和 ...

    Flex 和 java 整合 教程

    4. **Spring**:SpringFactory类和反射机制,用于管理和实例化后端服务。 5. **业务层**:基于Spring框架,使用Hibernate处理数据库操作,实现业务逻辑。 6. **Flex Application, Module, Component**:Flex前端应用...

    Flex控制SWF播放

    如果SWF文件内部没有暴露必要的控制接口,我们可能需要通过反射或者其他方式与SWF进行通信。ActionScript 3的`flash.utils.getDefinitionByName()`函数可以帮助我们获取SWF内部的类或函数。 6. **Flex与Flash集成...

    Flex 逼真海洋效果

    - **ColorTransform**:用于改变DisplayObject的颜色和透明度,我们可以用它来模拟阳光照射下的海面反射和阴影。 - **GradientFill** 和 **LinearGradient**:这些可以用来创建海浪的深度感,通过渐变从深蓝色到浅...

    flex 超炫的3d效果+源码

    通过Away3D,你可以创建旋转、缩放、平移等基本3D变换,还可以实现更复杂的3D特效,如阴影、反射、折射和粒子系统。 Flare3D则是一个更加面向设计师的3D框架,它支持导入3D模型(如3DS Max或Maya导出的模型),并...

    flex3d实例

    Flex 3D支持多种光照类型(如点光源、平行光等)和材质属性(如颜色、镜面反射、环境贴图等),让3D模型更具真实感。 5. **动画和交互**:Flex 3D提供了丰富的动画控制机制,可以创建平滑的3D过渡效果。同时,用户...

    Flex通信-Java服务端通信实例

    这通常涉及到创建一个Spring MVC或Servlet,处理HTTP请求,并通过Java的反射机制或其他手段解析AMF消息。在Spring MVC中,可以创建一个Controller,使用注解如`@RequestMapping`来定义处理的URL路径。 接着,Flex...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    由于 BlazeDS 需要将 Java 接口 FlexService 暴露给 Flex 前端,因此,我们在配置文件 remoting-config.xml 中将 FlexService 接口声明为一个服务: 清单 6. 定义 flexService 服务 <destination id="flex...

    flex超炫倒影效果

    在本文中,我们将深入探讨如何使用Flex实现超炫的倒影效果,并且将重点放在如何调整模糊程度和影子长度。Flex是一种强大的CSS3布局模式,允许开发者在各种屏幕尺寸和方向上创建灵活、响应式的网页设计。倒影效果则是...

    ActionScript教程 Flex教程 ActionScript+Flex教程

    - **高级主题**:异常处理、反射、泛型等。 - **游戏开发**:物理引擎的使用、碰撞检测、游戏循环等。 #### 四、Flex教程 - **MXML基础**:MXML元素、属性、样式和脚本的使用。 - **组件和容器**:标准UI组件(如...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    由于 BlazeDS 需要将 Java 接口 FlexService 暴露给 Flex 前端,因此,我们在配置文件 remoting-config.xml 中将 FlexService 接口声明为一个服务: 清单 6. 定义 flexService 服务 <destination id="flex...

    Unity镜子效果、镜面反射效果(无需Shader)即可实现

    无需自己找镜子Shader,只需2个脚本即可在Unity中创建一个简单的模拟镜面反射效果。 使用教程链接:https://blog.csdn.net/ChinarCSDN/article/details/80862999

    Away3D学习02场景SkyBox和反射

    在本篇中,我们将深入探讨 Away3D 学习的第二部分,主要关注场景中的SkyBox(天空盒)和反射效果。Away3D 是一款基于 ActionScript 的高性能三维引擎,常用于开发 Flash 平台上的交互式3D应用。通过 SkyBox 和反射,...

    Flex特效示例

    Flex特效示例主要展示了在ActionScript 3.0框架下使用Adobe Flex进行视觉效果和动画设计的各种技术。Flex是一款强大的开发工具,用于构建富互联网应用程序(RIA),它提供了丰富的组件库和强大的图形处理能力,使得...

    Flex 3D圆形隧道效果

    通过调整Light3D对象的位置和强度,以及Material对象的属性,可以改变3D物体表面的反射、阴影和颜色,从而提升立体感。 6. **事件处理**:为了让用户能够与3D隧道互动,需要监听鼠标和键盘事件,根据用户的输入调整...

Global site tag (gtag.js) - Google Analytics