zoukankan      html  css  js  c++  java
  • 一个简单 JDK 动态代理的实例

    动态代理的步骤:

    1. 创建一个实现了 InvocationHandler 接口的类,必须重写接口里的 invoke()方法。
    2. 创建被代理的类和接口
    3. 通过 Proxy 的静态方法 newProxyInsatance(ClassLoader loader,Class[] interfaces,InvocationHandler,handler) 来创建一个代理
    4. 通过代理来调用方法

    简单的动态代理实例

      1 package com.sean.zzzjvm;
      2 
      3 import java.lang.reflect.InvocationHandler;
      4 import java.lang.reflect.Method;
      5 import java.lang.reflect.Proxy;
      6 
      7 /** * * @Author Sean * @Date 2017/8/20 21:43. * @Version */
      8 public class DynamicProxyTest {
      9 
     10     // 定义一个接口
     11     interface IHello{
     12         void sayHello();
     13     }
     14 
     15     // 实现该接口的类
     16     static class Hello implements IHello{
     17 
     18         @Override
     19         public void sayHello() {
     20             System.out.println("hello world");
     21         }
     22     }
     23 
     24     // 创建一个动态代理类,实现 InvocationHandler 接口
     25     static class DynamicProxy implements InvocationHandler{
     26         Object originalObj;
     27 
     28         // 创建一个代理的方法,在 new DynamicProxy().bind(new Hello()); 执行
     29         Object bind (Object originalObj){
     30             this.originalObj = originalObj;
     31             // 返回一个代理对象
     32             return Proxy.newProxyInstance(originalObj.getClass().getClassLoader(),
     33                     originalObj.getClass().getInterfaces(),this);
     34         }
     35 
     36         // 默认重写的方法,在 hello.sayHello() 执行
     37         @Override
     38         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
     39             System.out.println("welcome");
     40             return method.invoke(originalObj,args);
     41         }
     42     }
     43 
     44     public static void main(String[] args){
     45         // IHello hello = new Hello();
     46         // 调用动态代理的方法
     47          IHello hello = (IHello) new DynamicProxy().bind(new Hello());
     48         hello.sayHello();
     49     }
     50 
     51 }
  • 相关阅读:
    js页面跳转(转载)
    insert into select union 插入数据到sqlserver中会自动排列
    一段没用的代码
    gridview中自动生成的列不可以设置只读
    Treeview 简单遍历,赋值,检查 checkbox
    线程操作一个无限循环,cpu 占用 25% 左右
    相对路径,绝对路径互转
    遍历虚拟网站下所有目录
    一个级联关系的表,向上获取各个字段名的函数
    大家用.net 大部分的工作是在干什么
  • 原文地址:https://www.cnblogs.com/ios9/p/7473216.html
Copyright © 2011-2022 走看看