`

通过代理传参数

阅读更多

通过代理传参数

package com.xlands.utils {
	import flash.display.InteractiveObject;
	import flash.utils.Dictionary;

	public class Delegate {
		/**
		 *用来存放createListener来创建的侦听器
		 */
		private static var funDictionary:Dictionary = new Dictionary;

		/**
		 * 给方法增加参数
		 */
		public static function create(method:Function, ... additionalArgs):Function {
			return createWithArgs(method, additionalArgs);
		}

		/**
		 * @desc 给方法增加参数 方法(2)
		 * @detail 下面的静态方法,主要是针对给事件侦听器传入参数,在需要移除时间侦听器时能找到它的引用
		 *
		 * @usage
		 * xxx.addEventListener(Event.xxx,Delegate.createListener(funNeedAddParam,xxx,1);
		 *
		 * 清除方法:(两步)
		 * xxx.removeEventListener(Event.xxx,Delegate.getListener(funNeedAddParam,xxx);
		 * Delegate.delFunction(funNeedAddParam,xxx);<------这步不要忘记...否则会令本类里面的funDictionary变臃肿
		 *
		 * by haosheng.lin
		 * @param method 要传参的函数引用
		 * @param additionalArgs 传到函数的参数
		 * @return 传参后的新函数引用
		 *
		 */
		public static function createListener(method:Function, $listenerCurrentTarget:InteractiveObject, ... additionalArgs):Function {
			return createWithArgs(method, additionalArgs, true, $listenerCurrentTarget);
		}

		private static function createWithArgs(func:Function, args:*, needRemove:Boolean = false, $listenerCurrentTarget:InteractiveObject = null):Function {
			var f:Function = function():* {
					var func0:Function = arguments.callee.func;
					var parameters:Array = arguments.concat(args);
					return func0.apply(null, parameters);
				};

			f["func"] = func;

			if (needRemove) {
				var funDic:Dictionary = null;
				if ($listenerCurrentTarget in funDictionary) {
					funDic = funDictionary[$listenerCurrentTarget] as Dictionary;
				} else {
					funDic = new Dictionary();
					funDictionary[$listenerCurrentTarget] = funDic;
				}
				funDic[func] = f;
			}
			return f;
		}

		public static function getListener(fun:Function, $listenerCurrentTarget:InteractiveObject):Function {
			var listener:Function = null;
			if ($listenerCurrentTarget in funDictionary) {
				var funDic:Dictionary = funDictionary[$listenerCurrentTarget] as Dictionary;
				if (fun in funDic) {
					listener = funDic[fun] as Function;
				} else {
					//throw new Error("请求的函数不存在,可能不是用createListener()方法来创建,又或者已经使用delFun()来删除了")
					listener = null;
				}

			} else {
				//throw new Error("请求的函数不是用createListener()方法来创建,又或者已经使用delFun()来删除了")
				listener = null;
			}
			return listener;
		}

		public static function delListener($fun:Function, $listenerCurrentTarget:InteractiveObject):void {
			if ($listenerCurrentTarget in funDictionary) {
				var funDic:Dictionary = null;
				funDic = funDictionary[$listenerCurrentTarget] as Dictionary;
				delete funDic[$fun];
				if (DictionaryUtil.isLengthZero(funDic) == true) {
					delete funDictionary[$listenerCurrentTarget]
				}
			}
		}

	}
}

 

 使用方法

var action:XlandsHttpAction = new XlandsHttpAction();
action.addEventListener(HttpEvent.ON_HTTP_SUCCESS, Delegate.create(onRegisterSuccess, b));
action.actByMain();

private function onRegisterSuccess(b:Boolean):void{
	this.registered = b;		
}

 

 

分享到:
评论

相关推荐

    springboot websocket集群(stomp协议)连接时候传递参数

    首先,让我们来看看如何在前端通过JavaScript代码与后端建立连接并传递参数。以下是一个简单的示例: ```javascript ${request.contextPath}/scripts/sockjs.min.js"&gt; ${request.contextPath}/scripts/stomp.min.js...

    lotus domino java代理_获取传递值json

    Lotus Domino Java 代理获取传递值 JSON Lotus Domino 是一种基于Notes技术的服务器端应用程序, Lotus Domino Java 代理是指在 Domino 服务器上运行的 Java 代理程序,可以用来处理用户请求、提供数据服务等。今天...

    Nginx+lua通过url传参的方式实现动态代理

    ### Nginx+Lua通过URL传参方式实现动态代理 #### 概述 在现代Web应用开发中,灵活地管理后端服务之间的通信是至关重要的。动态代理技术为这一需求提供了解决方案,使得前端可以方便地根据业务逻辑将请求转发至不同...

    Xfire调用webservice无法传递参数问题

    例如,查看客户端如何创建服务代理,调用方法以及传递参数;检查服务端的接口定义和服务实现;查看日志文件以获取错误信息等。 总之,解决Xfire调用Web服务时参数传递问题需要对Web服务原理、Xfire框架以及Java编程...

    webservice cxf 服务端客户端传递参数的例子demo

    - 调用服务:通过代理对象调用服务方法,传递参数并接收返回值。 4. **测试传递参数的test类** 为了确保服务端和客户端能正确通信,通常会编写测试类来模拟各种参数传递场景。这些测试类可能包含: - 单个基本...

    JAVA反射参数传递概略

    一旦我们有了`Method`对象,就可以调用`invoke()`方法来执行该方法,并传递参数。 以下是一个简单的`MethodDemo.java`代码示例,展示了如何使用反射调用方法并传递参数: ```java import java.lang.reflect.Method...

    spring mail通过代理发送邮件

    如果网络环境需要通过代理服务器,那么在配置`JavaMailSender`时,需要额外设置代理参数。JavaMail API提供了一个`ProxyHandler`类,可以用来处理代理连接。你需要创建一个`Properties`对象,设置`mail.smtp.proxy....

    java调用json参数的webservice

    在Java客户端,创建了一个JSON格式的字符串作为参数,然后通过WebService的客户端代理类SayHelloService的实例,调用其getSayHelloPort方法得到服务端点SayHelloDelegate的实例。通过这个实例,调用sayHaha方法并将...

    AOP修改方法的参数

    通过以上示例可以看出,使用 AOP 技术能够方便地截取并修改方法的参数,这在很多场景下非常有用,比如需要根据不同的参数值执行不同的逻辑处理或者在方法调用前后做一些额外的处理工作。掌握这一技巧,不仅能够提高...

    Java代理模式Java动态代理

    - **构造参数:** 创建`Proxy`类实例时,需要传递一个`InvocationHandler`对象作为参数,这意味着每个代理类都会关联一个`InvocationHandler`处理器。 - **静态方法:** `newProxyInstance`方法用于创建代理类实例,该...

    http代理搜索工具(HTTP代理列表)

    描述中提到的“自动搜索无须设置”,意味着该工具可能具备自动化功能,用户无需手动输入或配置复杂的代理服务器参数,工具会自动帮用户搜索可用的HTTP代理。这为不熟悉网络设置的用户提供了一种便利,他们只需运行...

    krigingmodel_Matlab_代理模型_代理模型matlab_Kriging代理模型_krigingmodel_Mat

    Kriging代理模型是一种统计插值方法,通过构建高斯过程回归模型来逼近复杂函数,以进行预测和不确定性量化。 一、Kriging代理模型原理 Kriging模型由法国矿业工程师Dan G. Krige提出,最初用于地质勘探中的矿产储量...

    Cocoa App获取启动参数

    本文将深入探讨如何在Cocoa App中获取启动参数,以及如何通过另一个Cocoa应用程序传递这些参数。 首先,我们要理解什么是启动参数。在命令行环境中,程序启动时可以接受一系列的参数,这些参数在程序执行前就已经...

    C#事件和代理详细介绍

    - 声明一个代理类型,其参数和返回值类型需与欲传递的方法一致。 - 创建代理实例,并传入欲传递的方法作为参数。 - 在需要实现异步调用的地方,通过创建的代理实例来调用目标方法。 #### 三、示例代码分析 以下...

    关于jdk动态代理的源码剖析

    - `args`:表示方法调用时传递的参数。 #### 六、Proxy类的作用与实现原理 `Proxy`类是JDK中专门用于生成动态代理类的工具类。它提供了一系列静态方法来帮助我们生成代理对象。 1. **`ProxyGenerator`的作用**:`...

    lotus domnio java代理传值

    "lotus domnio java代理传值"这个主题主要涉及如何在Java代码中创建和使用代理,并在代理之间传递参数。 首先,让我们了解一下Lotus Domino Java代理的基本概念。在Lotus Domino Designer中,Java代理是用Java语言...

    http-websocket代理,实现websocket请求就像操作http请求一样,有使用说明

    4. **数据传输**:描述数据如何在HTTP客户端和WebSocket服务器之间通过代理进行传递,可能涉及编码格式、数据结构等。 5. **错误处理和调试**:提供遇到问题时的解决方法,如网络连接失败、协议错误等,以及如何查看...

    动态代理原理实例Demo

    - 当通过代理对象调用方法时,`Proxy`会将方法调用封装成`Method`对象和方法的参数列表,然后传递给`InvocationHandler.invoke()`。`invoke()`方法可以根据这些信息决定如何处理方法调用。 4. **实际应用示例** -...

    Java动态代理案例演示代码

    使用`Proxy.newProxyInstance()`方法创建代理对象,需要传递三个参数:目标类的类加载器、目标类实现的接口列表和`InvocationHandler`实例。 ```java Class[] interfaces = target.getClass().getInterfaces(); ...

    11 动态代理的例子

    参数proxy代表代理对象,method表示被调用的方法,args是传递给方法的参数。你需要在此方法中实现附加的行为,然后调用`method.invoke(target, args)`来转发调用到实际的目标对象。 2. **Proxy类**: 使用`Proxy....

Global site tag (gtag.js) - Google Analytics