`
javalinjx
  • 浏览: 87120 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flex 中As3Commons的使用學習

    博客分类:
  • Flex
阅读更多

         學習Java的人,知道java中反射的强大,使用Flex是學習他的反射机制,发现有开源组件As2Commons实现flex的反射机制.

本人写的实例demo如下:

package commons
{
 
 import org.as3commons.logging.ILogger;
 import org.as3commons.logging.LoggerFactory;
 import org.as3commons.reflect.ClassUtils;
 import org.as3commons.reflect.Constant;
 import org.as3commons.reflect.Constructor;
 import org.as3commons.reflect.Field;
 import org.as3commons.reflect.MetadataUtils;
 import org.as3commons.reflect.Method;
 import org.as3commons.reflect.Parameter;
 import org.as3commons.reflect.Type;
 import org.as3commons.reflect.Variable;
 import mx.utils.ObjectProxy;
 /**
  * AS3commons 的学习的应用
  * 
  */ 
 public class CommonRelection
 {
  //用于记录日志信息
  var logger:ILogger=LoggerFactory.getClassLogger(CommonRelection);
  
  public function CommonRelection()
  {
  }
  /**
   * 
   *  獲取类的信息
   */ 
  public function getClassInfo(clazz:Class):Type
  {
   //獲取类的元数据對象
   var type:Type=Type.forClass(clazz);
   //獲取非静态常量
   var constArrays:Array=type.constants;
   //
   var varArray:Array=type.staticVariables;
   
   //獲取类的全名称
   var className:String=type.fullName;
   trace("classname= "+className);
   var constructor:Constructor =type.constructor;
   var params:Array=constructor.parameters;
   var ps:String="";
   for(var i:int=0;i<params.length;i++)
   {
     var p:Parameter=params[i] as Parameter;
     ps+=p.type.name+" index ="+p.index;
   }
   trace(" name ="+constructor.declaringType.name+"paramers="+ps);
   
   //獲取绑定的属性
   var bindable:Array=type.getMetaData("Bindable");
   var m:Method=type.getMethod("setEmp");
   //獲取静态常量
   var constArray:Array=type.staticConstants;
   for(var i=0;i<constArray.length;i++)
   {
      var aconst:Constant=constArray[i] as Constant;
      trace("name ="+aconst.name+"  DeclareType="+aconst.declaringType.fullName);
   }
    return null;
  }
  /**
   * 
   * 根据类名查找类
   * @params clazzName 例如:
   *  com.company.domain.Person
   * com.company.domain::Person
   */ 
        public function getClass(clazzName:String):Type
  {
   //獲取类的元数据對象 相等与Java 中Class
   var type:Type=Type.forName(clazzName);
      return type;
  }
  /**
   * 
   * 根据类名查找类的所用的属性
   * 
   */ 
        public function getFields(o:Object):void
  {
   var xml:XML=MetadataUtils.getFromObject(o);
   trace("xml" +xml);
   
   //獲取對象的類名信息
     var clazz:Class=ClassUtils.forInstance(o);
   //得到反射类的對象
   var type:Type=Type.forInstance(o);
   //获取类中属性和变量
   var fields:Array=type.fields;
      for(var i:int=0;i<fields.length;i++)
      { 
       var field:Field=fields[i] as Field;
       if(field is Variable)
       {
            trace("Name ="+ field.name+" "+" Value="+field.getValue(o)); 
       }
      }
  }
  /**
   * 
   * 根据类名查找类的所用的属性
   */ 
        public function existsField(o:Object,field:String):Object
  {
   //獲取對象的類名信息
      var clazz:Class=ClassUtils.forInstance(o);
   //得到反射类的對象
       var type:Type=Type.forInstance(o);
       var vars:Array=type.variables;
       
   //检测类中是否有某个属性
   if(clazz.hasOwnProperty(field))
   {
    var sfield:Field=type.getField(field);
    trace("Name ="+ sfield.name+" "+" Value="+sfield.getValue(o)); 
   }else{
     logger.info(" can't the {0} in the class of {1}",field,type.name);
   }
   return null;
  }
  /**
   * 
   * 根据类名查找类的方法
   * @params clazzName 例如:
   *  com.company.domain.Person
   * com.company.domain::Person
   */ 
        public function getMethods(clazz:Class):Type
  {
   //得到反射类的對象
   var type:Type=Type.forClass(clazz);
   //var type:Type=Type.forClass(clazz);
   //获取类中属性
   var methods:Array=type.methods;
      for(var i:int=0;i<methods.length;i++)
      { 
       var method:Method=methods[i] as Method;
         trace("Name ="+ method.name+" "+"return type="+method.returnType.name); 
      }
      return null;
  }
  /**
   * 动态调用类中方法
   */ 
    public  function invokeMethod(o:Object,method:String,args:Array=null):*
    {
        //獲取类的元数据對象
        var type:Type=Type.forInstance(o);
        var data:*;
        //獲取类的方法
        var m:Method=type.getMethod(method);
        if(m!=null)
        {
          data=m.invoke(o,args);
        }
        return data;
     }
  
 }
}

 

调用的test类如下:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"  initialize="init()" layout="absolute" xmlns:view="commons.*">
 <mx:Script>
  <![CDATA[
      import model.Employee;
      import commons.CommonRelection;
   public function init():void
   {
      var a:CommonRelection=new CommonRelection();
      var emp:Employee=new Employee();
      a.existsField(emp,"empName");
      a.getClass("model.Employee");
      a.getClassInfo(Employee);
      a.getFields(emp);
      a.getMethods(Employee);
      a.invokeMethod(emp,"setEmpName",["xiaobai"]);
      trace(emp.getEmpName());
      //com.company.domain.Person
         //com.company.domain::Person
      
   }
  ]]>
 </mx:Script>
</mx:Application>

 

转自:http://topmanopensource.iteye.com/category/71512?show_full=true

转自:

分享到:
评论

相关推荐

    As2Commons反射

    本文将详细介绍如何使用As2Commons来实现Flex中的反射机制。 #### 二、As2Commons简介 As2Commons是一个基于ActionScript 3.0的开源库,提供了丰富的工具和实用程序,其中包括了对反射的支持。它为开发者提供了一...

    as3编程学习

    在学习的资源中,提到了Creative Commons Attribution Non-Commercial 3.0 License,这是一种非商业用途的共享许可证,用户可以复制和分发指南,但必须遵守指定的条款。Adobe和其他公司,比如Microsoft、Apple和Sun ...

    Flex代码检查PMD

    Flex代码检查PMD是一种针对ActionScript 3(AS3)代码的质量分析工具,与Java中的PMD类似。PMD( Potion Memory Debugger)最初是为Java语言设计的源代码分析器,用于检测潜在的编程错误、代码异味(code smell)...

    As3commonsLog

    下面将详细介绍As3commonsLog库的使用方法、主要特性以及如何将其集成到Flex项目中。 **As3commonsLog的核心特性:** 1. **多级别的日志记录**:As3commonsLog支持多种日志级别,包括`DEBUG`、`INFO`、`WARN`、`...

    flex PMD - flex代码检查

    Flex PMD 是一款针对Flex开发的代码质量检查工具,它主要的作用是对Flex项目中的ActionScript 3(AS3)代码进行静态分析,发现潜在的编程问题、代码异味和不规范的编码习惯。PMD(Probable Bugs, Maintainability, ...

    Flex结合J2EE的资料

    同时,还列出了其他一些库的下载链接,如as3corelib、json-lib、ezmorph等,这些都是在Flex和Java开发中常用的库,它们分别提供了AS3核心库支持、JSON处理功能和对象转换工具。 as3corelib是一个ActionScript 3的...

    flex air记录日志的实例

    可以考虑使用第三方日志库,如AS3Commons的Logging框架,它提供了更完善的日志管理和配置能力。 总的来说,有效的日志记录能极大地提升Flex Air应用的可维护性和稳定性。通过自定义日志工具类,开发者可以定制适合...

    spring actionscript 必须的.swc包

    总之,这个压缩包是一个完整的开发环境,适合那些希望在ActionScript 3项目中使用Spring框架和Cairngorm架构的开发者。通过这些库的集成,可以实现更强大的组件管理和测试,提高ActionScript应用程序的开发效率和...

    flex + java上传

    - Flex项目通常由.mxml和.as文件组成,mxml用于定义用户界面,as用于编写业务逻辑。 - Flex使用Flash Player或Adobe AIR运行,支持跨平台运行。 2. Java基础知识: - Java是一种多平台的、面向对象的编程语言,...

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

    然后,打开 Flex Builder 3,创建一个新的 Flex Project,命名为 EmployeeMgmt-Flex: 图 3. 新建 Flex 工程 - 第一步 Flex Project 需要指定 Server 端的配置文件地址: 图 4. 新建 Flex 工程 - 第二步 ...

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

    然后,打开 Flex Builder 3,创建一个新的 Flex Project,命名为 EmployeeMgmt-Flex: 图 3. 新建 Flex 工程 - 第一步 Flex Project 需要指定 Server 端的配置文件地址: 图 4. 新建 Flex 工程 - 第二步 ...

    Flex PureMVC手册

    - **Event与Notification**:事件是AS3的标准机制,而通知则是PureMVC特有的机制,用于更灵活地传递消息。 - **定义Notification**:通过定义特定的通知名称和类型,来标准化通信方式。 - **处理Notification**:...

    everest-flex:使用everest框架的REST服务器的Flex客户端

    as3-commons-lang: : as3-corelib: 此外,您需要将 flex 移动组件包包含到 Flex 构建路径中: ${FLEXSDK}/frameworks/libs/mobile/mobilecomponents.swc ${FLEXSDK}/frameworks/themes/Mobile/mobile.swc

    flex 导出Excel(当前应用小结、示例、jar包)

    3. AirExcel.rar,as3xls.rar:air下Excel开发包 4. csvlib-1.4.1.rar:生成cvs格式数据 5. jxls-reader-0.9.6.jar,commons-jexl-1.1.jar,jxls-core-0.9.6.jar:jxls操作Excel的开发包,与poi共同构成当前java下...

    flashbuilder 4 help pdf中文版

    3. 关于文档中的技术术语: - ActionScript是Adobe Flash平台的主要编程语言,用于控制电影剪辑,处理用户输入和交互,以及访问本地系统资源。 - ColdFusion是Adobe推出的一个用于快速开发基于Web的应用程序的...

    FlashDevelop-4.0.0-RTM(下载地址)+汉化+安装配置方法(保证好用)

    你可以从官方网站或其他第三方源下载插件,如AS3 Commons、FlashLibs等,它们提供了丰富的库和工具,以满足不同开发需求。安装插件通常只需将插件文件复制到FlashDevelop的“Plugins”目录下,并在重启后启用。 总...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Creative Commons BY-ND-NC Foreword: Beta 0.16 Preface 1. How to Use this Book 2. Your Feedback 3. Font Conventions 4. Maven Writing Conventions 5. Acknowledgements 1. 介绍 Apache Maven 1.1....

    Case Simulation Engine:CaseSim:Flash XML多面板案例模拟UTTC TeleCampus-开源

    Flex使用ActionScript 3编程语言,支持MXML标记语言,允许开发者用面向对象的方式构建UI组件。 2. **XML数据驱动**:CaseSim的核心特性是利用XML文件来存储和管理模拟案例的界面和内容。XML是一种结构化数据格式,...

Global site tag (gtag.js) - Google Analytics