Java动态代理简单实现


Java动态代理简单实现:

  1. package com.dynamic.proxy;  
  2.   
  3. public class ProxyDemo {  
  4.   
  5.     public static void main(String[] args) throws SecurityException, NoSuchMethodException {  
  6.           
  7.         LogHandler logHandler = new LogHandler();  
  8.           
  9.         IHello hello = (IHello)logHandler.bind(new HelloImp());  
  10.           
  11.         hello.toHello("cross");  
  12.         hello.toHello1("cross");  
  13.           
  14.     }  
  15. }  

 

  1. package com.dynamic.proxy;  
  2.   
  3. import java.lang.reflect.InvocationHandler;  
  4. import java.lang.reflect.Method;  
  5. import java.lang.reflect.Proxy;  
  6.   
  7. public class LogHandler implements InvocationHandler {  
  8.   
  9.     private Object deledate;  
  10.       
  11.     public Object bind(Object deledate){  
  12.         this.deledate = deledate;  
  13.         Object proxy = Proxy.newProxyInstance(deledate.getClass().getClassLoader(), deledate.getClass().getInterfaces(), this);   
  14.         return proxy;  
  15.     }  
  16.       
  17.     public Object invoke(Object proxy, Method method, Object[] obj)  
  18.             throws Throwable {  
  19.           
  20.         doBefore();  
  21.           
  22.         Object result = method.invoke(deledate, obj);  
  23.           
  24.         doAfter();  
  25.           
  26.         return result;  
  27.     }  
  28.       
  29.     private void doBefore() {  
  30.         System.out.println("before....");  
  31.     }  
  32.   
  33.       
  34.     private void doAfter() {  
  35.         System.out.println("after....");  
  36.     }  
  37.       
  38. }  

 

  1. package com.dynamic.proxy;  
  2.   
  3. public interface IHello {  
  4.     public void toHello(String name);  
  5.     public void toHello1(String name);  
  6. }  

 

  1. package com.dynamic.proxy;  
  2.   
  3. public class HelloImp implements IHello {  
  4.   
  5.     public void toHello(String name) {  
  6.         System.out.println("method hello:" + name);  
  7.     }  
  8.     public void toHello1(String name) {  
  9.         System.out.println("method hello1:" + name);  
  10.     }  
  11.   
  12. }  

相关内容