java动态代理

编写Java动态代理的步骤如下:

 

1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法

 

2.创建被代理的类以及接口

 

3.通过Proxy的静态方法 newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 

 

 

 4.通过代理调用方法

Java代码 复制代码
  1. package test;   
  2.   
  3. public interface PeopleInfac {   
  4.     public void showInfo();   
  5.   
  6. }  

package test; public interface PeopleInfac { public void showInfo(); }

 

 

Java代码 复制代码
  1. package test;   
  2.   
  3. public class People implements PeopleInfac {   
  4.   
  5.     public void showInfo() {   
  6.   
  7.         System.out.println("people showInfo()");   
  8.     }   
  9.   
  10. }  

package test; public class People implements PeopleInfac { public void showInfo() { System.out.println("people showInfo()"); } }

 

 

Java代码 复制代码
  1. package test;   
  2.   
  3. import java.lang.reflect.InvocationHandler;   
  4. import java.lang.reflect.Method;   
  5.   
  6. public class DanimacProxy implements InvocationHandler {   
  7.   
  8.     Object o;   
  9.   
  10.     public DanimacProxy(Object o) {   
  11.         this.o = o;   
  12.     }   
  13.   
  14.     public Object invoke(Object proxy, Method method, Object[] args)   
  15.             throws Throwable {   
  16.         method.invoke(o, null);   
  17.         return null;   
  18.     }   
  19. }  

package test; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DanimacProxy implements InvocationHandler { Object o; public DanimacProxy(Object o) { this.o = o; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { method.invoke(o, null); return null; } }

 

 

Java代码 复制代码
  1. package test;   
  2.   
  3. import java.lang.reflect.InvocationHandler;   
  4. import java.lang.reflect.Proxy;   
  5.   
  6. public class Test {   
  7.   
  8.     public static void main(String[] args) {   
  9.   
  10.         People p = new People();   
  11.   
  12.         InvocationHandler proxy = new DanimacProxy(p);   
  13.   
  14.         Class<?> cls = p.getClass();   
  15.   
  16.         PeopleInfac pi = (PeopleInfac) Proxy.newProxyInstance(cls   
  17.                 .getClassLoader(), cls.getInterfaces(), proxy);   
  18.   
  19.         pi.showInfo();   
  20.     }   
  21. }  

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值