• java学习笔记14--动态代理


    java学习笔记14--动态代理

     

    InvocationHandler接口

    1. public interface InvocationHandler{  
    2.     public Object invoke(Object proxy,Method method,Object[] args)throws Throwable  
    3. }  


    参数说明:

    Object  proxy:被代理的对象

    Method  method:要调用的方法

    Object   args[]:方法调用时所需要的参数

    Proxy类

    Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下的操作方法:

    1. public static Object newProxyInstance(ClassLoader loader,  
    2.             Class<?>[] interfaces,  
    3.             InvocationHandler h)  
    4.             throws IllegalArgumentException  

    参数说明:

    ClassLoader  loader:类加载器

    Class<?>[]  interfaces:得到全部的接口

    InvocationHandler  h:得到InvocationHandler接口的子类实例

     

    动态代理:

    1. package com.itmyhome;  
    2.   
    3. import java.lang.reflect.InvocationHandler;  
    4. import java.lang.reflect.Method;  
    5. import java.lang.reflect.Proxy;  
    6.   
    7. interface IHello{    //定义接口  
    8.     public void sayHello();  
    9. }  
    10. class HelloImpl implements IHello{  
    11.   
    12.     @Override  
    13.     public void sayHello() {  
    14.         // TODO Auto-generated method stub  
    15.         System.out.println("hello itmyhome");  
    16.     }  
    17. }  
    18. class MyInvocationHandler implements InvocationHandler{  
    19.   
    20.     private Object obj;   //真实主题类  
    21.     public Object bind(Object obj){  
    22.         this.obj = obj;  
    23.         return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);  
    24.     }  
    25.     @Override  
    26.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
    27.         System.out.println("***before***");  
    28.         Object temp = method.invoke(obj, args);  
    29.         System.out.println("***after***");  
    30.         return temp;  
    31.     }  
    32. }  
    33.   
    34. public class T {  
    35.     public static void main(String[] args) throws Exception{  
    36.         IHello h = (IHello)new MyInvocationHandler().bind(new HelloImpl());  
    37.         h.sayHello();  
    38.     }  
    39. }  
  • 相关阅读:
    简单批处理内部命令简介(转)
    CPU 内存 频率 DDR DDR2 DDR3
    python 正则表达式
    bat 脚本 > >> 管道
    python 多进程 无数进程 重复进程 死机
    NLP相关期刊和会议
    deamon tools dtsoft virtual cdrom device 失败 错误
    占位
    2011年07月03日的日记
    每周总结(第二周)
  • 原文地址:https://www.cnblogs.com/timssd/p/4790451.html
Copyright © 2020-2023  润新知