使用reflect proxy

原创 2004年11月01日 16:02:00

用reflect proxy把你的商业方法执行推迟,并放到其他地方执行。

概念:1.proxy instance  代理实例
     2.invocationHandler 调用处理器
编写商业对象和接口:
public interface BusinessInterface
{
 public void processBusiness();
}

public class BusinessObject implements BusinessInterface
{
 public void processBusiness(){
  System.out.println("this is the business code!");
 }
};

编写调用处理器,商业方法就在这里被调用:

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;

public class Myhandler implements InvocationHandler
{
 Object businessObject;
 Myhandler(Object delegate){
  businessObject = delegate;
 }
 public Object invoke(Object proxy , Method method , Object[] args) throws IllegalAccessException ,InvocationTargetException{
  Object o = null;
  System.out.println("log: start execute business");//这里可以用log4j,那么记录日志就和商业方法分开了
  //if(IsPermission(user)){//可以考虑在这里进行安全控制
   //Transaction.begin();//可以考虑在这里进行事务处理控制
   //long begin = System.CurrentTimeMillis();
   o = method.invoke(businessObject,args);//执行商业方法
   //long end = System.CurrenTimeMillis();
   //System.out.println(">>log:"+ (end - begin));//进行性能统计,
   //Transaction.commit();//
  //}
  System.out.println("log: end execute business");
  return o;
 }
};


构造代理实例并用代理实例来执行商业方法
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class AoP
{
 public static void main(String[] args)
 {
  BusinessInterface businessObject = new BusinessObject();
  //构造一个handler
  InvocationHandler handler = new Myhandler(businessObject);
  //构造代理实例
  BusinessInterface proxy = (BusinessInterface)Proxy.newProxyInstance(businessObject.getClass().getClassLoader(),businessObject.getClass().getInterfaces(),handler);
  //用代理实例来执行商业方法,那么代理会调用myhandler的invoke()来执行这个方法
  proxy.processBusiness();
 }
}

ECMAScript 6 学习系列课程 (ES6 proxy和Reflect的相关用法)

使用Javascript ES6的Proxy实现元编程, 如果你熟悉Java,这非常类似Java中的动态代理模式,在ES6中Proxy, Reflect实现了代理和反射机制,这样说大家可能比较生涩,我...
  • jiangbo_phd
  • jiangbo_phd
  • 2016年07月12日 12:09
  • 1738

ES6中的Proxy和Reflect对象的方法详解

首先看一个例子: var outerT=function(){return 'I am qinliang'} var handler={ apply:functio...
  • liangklfang
  • liangklfang
  • 2016年04月14日 15:27
  • 1508

ES6学习7(Proxy&Reflect)

Proxy
  • exialym
  • exialym
  • 2016年10月13日 13:51
  • 732

ECMAScript 6笔记(Symbol, Proxy 和 Reflect)

Symbol ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串...
  • wkyseo
  • wkyseo
  • 2016年05月11日 21:10
  • 614

ES6-Proxy与Reflect 实现重载(overload)

Proxy与Reflect实现重载(overload) 从语法角度讲JavaScript不支持重载。原因很简单,JS中函数可以传入任意类型、任意个数的参数,通通可以通过在函数内使用this.argum...
  • qiqingjin
  • qiqingjin
  • 2016年04月16日 21:56
  • 1918

ES6黑科技实践--proxy,reflect

最近逛GitHub看到大神sindresorhus 新出的on-change对象数组监听库。看了下代码,基于proxy实现。于是顺便研究一下es6中的proxy和reflect。...
  • u013707249
  • u013707249
  • 2017年12月19日 14:49
  • 120

java -- java.lang.reflect.proxy分析

proxy使用实例1http://www.cnblogs.com/linjiqin/archive/2011/02/18/1957600.html实例2/* *Copyright (c) 2016, ...
  • u010926176
  • u010926176
  • 2016年06月13日 17:17
  • 1067

ES6 -- Proxy搭档:Reflect

Reflect对象的主要功能:1、作为Object对象的优化:1) 将Object对象上的一些明显属于语言内部的方法放到Reflect上。例如:Object.defineProperty等。 2)...
  • u014328357
  • u014328357
  • 2017年05月09日 13:59
  • 118

ES6总结--Proxy、Reflect

3
  • liningaa
  • liningaa
  • 2017年05月24日 15:20
  • 158

Proxy和Reflect

转自:https://www.cnblogs.com/huansky/p/5687299.html Proxy概述 Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,...
  • zhanglir333
  • zhanglir333
  • 2017年11月22日 22:00
  • 1174
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用reflect proxy
举报原因:
原因补充:

(最多只允许输入30个字)