码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-09-08 06:51:47      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

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. }  

 

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

标签:

原文地址:http://www.cnblogs.com/timdes/p/4790451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!