`
longgangbai
  • 浏览: 7258956 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

flex 中As3Commons的使用學習

阅读更多

         學習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>

分享到:
评论
2 楼 longgangbai 2010-05-03  
eillittwang 写道
开源组件As2Commons。为啥我的机子上使用报错。找不到这些类


As2Commons网上开源的组件,必须到官网上下载的。
1 楼 eillittwang 2010-04-27  
开源组件As2Commons。为啥我的机子上使用报错。找不到这些类

相关推荐

    as3-commons源码

    as3-commons-concurrency as3-commons-lang as3-commons-logging as3-commons-reflect as3-commons-bytecode ...我主要是学习了flash日志,as3-commons-logging文件夹是关于日志的源码,纯AS 3。大家可以研究下。

    Commons 实战学习

    Commons 实战学习Commons 实战学习

    As2Commons反射

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

    commons-lang3-3.9-API文档-中文版.zip

    赠送jar包:commons-lang3-3.9.jar; 赠送原API文档:commons-lang3-3.9-javadoc.jar; 赠送源代码:commons-lang3-3.9-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.9.pom; 包含翻译后的API文档:...

    commons-lang3-3.3.2-API文档-中文版.zip

    赠送jar包:commons-lang3-3.3.2.jar; 赠送原API文档:commons-lang3-3.3.2-javadoc.jar; 赠送源代码:commons-lang3-3.3.2-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.3.2.pom; 包含翻译后的API文档...

    commons-lang3-3.12.0-API文档-中文版.zip

    赠送jar包:commons-lang3-3.12.0.jar; 赠送原API文档:commons-lang3-3.12.0-javadoc.jar; 赠送源代码:commons-lang3-3.12.0-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.12.0.pom; 包含翻译后的API...

    commons-math3-3.6.1-API文档-中英对照版.zip

    赠送jar包:commons-math3-3.6.1.jar; 赠送原API文档:commons-math3-3.6.1-javadoc.jar; 赠送源代码:commons-math3-3.6.1-sources.jar; 赠送Maven依赖信息文件:commons-math3-3.6.1.pom; 包含翻译后的API文档...

    commons-lang3-3.4-API文档-中文版.zip

    赠送jar包:commons-lang3-3.4.jar; 赠送原API文档:commons-lang3-3.4-javadoc.jar; 赠送源代码:commons-lang3-3.4-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.4.pom; 包含翻译后的API文档:...

    commons-math3-3.5-API文档-中文版.zip

    赠送jar包:commons-math3-3.5.jar; 赠送原API文档:commons-math3-3.5-javadoc.jar; 赠送源代码:commons-math3-3.5-sources.jar; 赠送Maven依赖信息文件:commons-math3-3.5.pom; 包含翻译后的API文档:...

    commons-lang3-3.7-API文档-中文版.zip

    赠送jar包:commons-lang3-3.7.jar; 赠送原API文档:commons-lang3-3.7-javadoc.jar; 赠送源代码:commons-lang3-3.7-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.7.pom; 包含翻译后的API文档:...

    commons-math3-3.6.1-API文档-中文版.zip

    赠送jar包:commons-math3-3.6.1.jar; 赠送原API文档:commons-math3-3.6.1-javadoc.jar; 赠送源代码:commons-math3-3.6.1-sources.jar; 赠送Maven依赖信息文件:commons-math3-3.6.1.pom; 包含翻译后的API文档...

    commons-math3-3.4.1-API文档-中文版.zip

    赠送jar包:commons-math3-3.4.1.jar; 赠送原API文档:commons-math3-3.4.1-javadoc.jar; 赠送源代码:commons-math3-3.4.1-sources.jar; 赠送Maven依赖信息文件:commons-math3-3.4.1.pom; 包含翻译后的API文档...

    commons-math3-3.1.1-API文档-中英对照版.zip

    赠送jar包:commons-math3-3.1.1.jar; 赠送原API文档:commons-math3-3.1.1-javadoc.jar; 赠送源代码:commons-math3-3.1.1-sources.jar; 赠送Maven依赖信息文件:commons-math3-3.1.1.pom; 包含翻译后的API文档...

    commons-lang3-3.5-API文档-中文版.zip

    赠送jar包:commons-lang3-3.5.jar; 赠送原API文档:commons-lang3-3.5-javadoc.jar; 赠送源代码:commons-lang3-3.5-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.5.pom; 包含翻译后的API文档:...

    commons-lang3-3.12.0-API文档-中英对照版.zip

    赠送jar包:commons-lang3-3.12.0.jar; 赠送原API文档:commons-lang3-3.12.0-javadoc.jar; 赠送源代码:commons-lang3-3.12.0-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.12.0.pom; 包含翻译后的API...

    commons-lang3-3.10-API文档-中文版.zip

    赠送jar包:commons-lang3-3.10.jar; 赠送原API文档:commons-lang3-3.10-javadoc.jar; 赠送源代码:commons-lang3-3.10-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.10.pom; 包含翻译后的API文档:...

    开发工具 commons-lang3-3.4

    开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-lang3-3.4开发工具 commons-...

    commons-lang3-3.10-API文档-中英对照版.zip

    赠送jar包:commons-lang3-3.10.jar; 赠送原API文档:commons-lang3-3.10-javadoc.jar; 赠送源代码:commons-lang3-3.10-sources.jar; 赠送Maven依赖信息文件:commons-lang3-3.10.pom; 包含翻译后的API文档:...

    commons-math3-3.5-API文档-中英对照版.zip

    赠送jar包:commons-math3-3.5.jar; 赠送原API文档:commons-math3-3.5-javadoc.jar; 赠送源代码:commons-math3-3.5-sources.jar; 赠送Maven依赖信息文件:commons-math3-3.5.pom; 包含翻译后的API文档:...

    as3commons-开源

    as3commons 旨在为 actionscript3 带来一些众所周知的 java.(lang|util).* 好东西,比如集合框架、字符串实用程序

Global site tag (gtag.js) - Google Analytics