什么叫代理与动态代理?

1.以买火车票多的生活实例说明。

因为天天调bug所以我没有时间去火车票,然后就给火车票代理商打电话订票,然后代理商就去火车站给我买票。就这么理解,需要我做的事情,代理商帮我办了,但是需要出手续费。

废话不说了,直接上java代码吧!

java动态代理

//接口   (抽象买票的事情)

public interface ICalc {
     public int add(int i, int j);
}
//实现这个接口   (具体到我买票的事情)

public class CalcImpl implements ICalc {

@Override
    public int add(int i,int j) {
        int result = i + j;
        return result;
    }
}

//动态创建代理对象   (代理商具备买票的能力,只要我打电话就可以了)

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Arrays;

public class CalcLoggingProxy  implements InvocationHandler {
    //被代理对象
    private ICalc target;
    public CalcLoggingProxy(){}
    public CalcLoggingProxy(ICalc obj){
        target = obj;
    }
    
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
           String methodName = method.getName();
           //日志
           System.out.println("invoke...before---> "+methodName+"---"+Arrays.asList(args));
           //执行方法
           Object  result = method.invoke(target,args);
           //日志
           System.out.println("invoke...after---->"+result);
        return result;
    }
    
    public static Object factory1(ICalc target)
      {
            //获取被代理对象的Class
            Class cls = target.getClass();
            //代理对象由哪一个类加载器负责
            ClassLoader loader = cls.getClassLoader();
            //代理对象的类型,即其中有哪些方法
            Class [] interfaces = new Class[]{ICalc.class};
            //当调用代理对象的方法时执行该代码--->先给代理对象赋值--->自动调用invoke();
            InvocationHandler handler = new CalcLoggingProxy(target);
            //返回代理对象的实例
            return Proxy.newProxyInstance(loader,interfaces,handler);
       }
     
}
//测试   (我就打了个电话去订票)
public class ProxyTest {
       public static void main(String[] args) {
         ICalc target = new CalcImpl();
         ICalc calcproxy =  (ICalc) CalcLoggingProxy.factory1(target);
         int result =  calcproxy.add(2, 4);
         System.out.println(result);
    }
}

//测试效果  (然后就有票了)

invoke...before---> add---[2, 4]
invoke...after---->6
6

java的代理和动态代理简单测试的更多相关文章

  1. java:java静态代理与动态代理简单分析

    java静态代理与动态代理简单分析 转载自:http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动 ...

  2. java静态代理与动态代理简单分析

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理 ...

  3. Java Proxy和CGLIB动态代理原理

    动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...

  4. java之静态代理和动态代理

    我们以几个问题,来开始我们今天的学习,如果下面几个问题,你都能说出个一二,那么恭喜你,你已经掌握了这方面的知识.1,什么是代理模式?2,Java中,静态代理与动态代理的区别?3,Spring使用的是J ...

  5. java代理:静态代理和动态代理

    一.Java中有一个设计模式是代理模式 代理模式是常用的Java设计模式,特征是代理类与委托类有相同的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类 ...

  6. JAVA静态代理和动态代理理解

    代理 代理是英文 Proxy 翻译过来的.我们在生活中见到过的代理,大概最常见的就是朋友圈中卖面膜的同学了. 她们从厂家拿货,然后在朋友圈中宣传,然后卖给熟人. 按理说,顾客可以直接从厂家购买产品,但 ...

  7. Java中的JDK动态代理

    所谓代理,其实就是相当于一个中间人,当客户端需要服务端的服务时,不是客户直接去找服务,而是客户先去找代理,告诉代理需要什么服务,然后代理再去服务端找服务,最后将结果返回给客户. 在日常生活中,就拿买火 ...

  8. Java核心技术点之动态代理

    本篇博文会从代理的概念出发,介绍Java中动态代理技术的使用,并进一步探索它的实现原理.由于个人水平有限,叙述中难免出现不清晰或是不准确的地方,希望大家可以指正,谢谢大家:) 一.概述 1. 什么是代 ...

  9. 【Java】代处理?代理模式 - 静态代理,动态代理

    >不用代理 有时候,我希望在一些方法前后都打印一些日志,于是有了如下代码. 这是一个处理float类型加法的方法,我想在调用它前打印一下参数,调用后打印下计算结果.(至于为什么不直接用+号运算, ...

随机推荐

  1. PHP高级程序员必学

    业务增长,给你的网站带来用户和流量,那随之机器负载就上去了,要不要做监控?要不要做负载均衡?用户复杂了,要不要做多终端兼容?要不要做CDN?数据量大了,要不要做分布?垂直分还是横向分?系统瓶颈在哪里? ...

  2. C++标准 bind函数用法与C#简单实现

    在看C++标准程序库书中,看到bind1st,bind2nd及bind的用法,当时就有一种熟悉感,仔细想了下,是F#里提到的柯里化.下面是维基百科的解释:在计算机科学中,柯里化(英语:Currying ...

  3. discuz 手机上看帖子图片显示“[viewimg]”如何修改?

    手机bbs上看帖子,如果帖子中有外网图片显示的是“[viewimg]”,而不是图片pre_forum_thread 主题表pre_forum_post 帖子表 库表pre_forum_post中字段m ...

  4. Spring JDBC JdbcTemplate类示例

    org.springframework.jdbc.core.JdbcTemplate类是JDBC核心包中的中心类.它简化了JDBC的使用,并有助于避免常见的错误. 它执行核心JDBC工作流,留下应用程 ...

  5. htop和ncdu

    今天突然发现服务器不能够mkdir了,说没空间,用df -h命令显示空间是很大的,网管过来用ncdu命令一下显示某些文件夹中有好多文件,说是因为linux中小文件太多引发,即实际空间还有很多,但是小文 ...

  6. Unity---------Mesh理解

    Mesh顾名思义“网格”,Unity3D里面所有的模型都是由Mesh组成的,UI也不例外. 例如下图,模型上的一个个小网格就是Mesh,这些Mesh有不同的三维顶点(Vector3),共同组成了一个3 ...

  7. C#.NET MVC 枚举转dictionary自动装载生成下拉框

      /// <summary> /// 枚举转SelectListItem /// </summary> public class Enum_Helper { /// < ...

  8. 数据库事物用法 SET XACT_ABORT ON

    数据库事物的用法和作用就不再重复,写一下在实战当中遇到的问题,代码如下: begin tran --开始执行事务     --语句一 update  set acount = acount-100 w ...

  9. NPOI 2.1.1 系列(2) 使用NPOI读取List或者datatable数据生成 Excel文档 ;Npoi生成 xlsx 2007以上文档

    结合上一篇文章  NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx ...

  10. ProGuard代码混淆详细攻略

    转载请标明出处:http://blog.csdn.net/shensky711/article/details/52770993 本文出自: [HansChen的博客] ProGuard简介和工作流程 ...