java动态代理

来源:互联网 发布:java调用javascript 编辑:程序博客网 时间:2024/06/08 17:12

 在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。

其实现主要通过是Java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。

Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现

业务接口

[java] view plain copy
  1. package com.itmyhome.manager;  
  2.   
  3. public interface UserManager {  
  4.     public void addUser();   //增加用户  
  5.     public boolean delUser(int id); //删除用户  
  6. }  


业务接口实现

[java] view plain copy
  1. package com.itmyhome.manager;  
  2.   
  3. //UserManager接口的实现类  
  4. public class UserManagerImpl implements UserManager {  
  5.   
  6.     @Override  
  7.     public void addUser() {  
  8.         // TODO Auto-generated method stub  
  9.         System.out.println("--addUser()--");  
  10.     }  
  11.   
  12.     @Override  
  13.     public boolean delUser(int id) {  
  14.         // TODO Auto-generated method stub  
  15.         System.out.println("--delUser()--");  
  16.         return true;  
  17.     }  
  18.   
  19. }  


InvocationHandler实现 测试在调用接口方法前输出一行代码

[java] view plain copy
  1. package com.itmyhome.manager;  
  2.   
  3. import java.lang.reflect.InvocationHandler;  
  4. import java.lang.reflect.Method;  
  5. import java.lang.reflect.Proxy;  
  6.   
  7. public class ProxyHandler implements InvocationHandler {  
  8.     private Object obj;   //要代理的对象  
  9.     public Object createProxy(Object obj){   //创建代理   
  10.         this.obj = obj;  
  11.         return Proxy.newProxyInstance(obj.getClass().getClassLoader(),  
  12.                                obj.getClass().getInterfaces(),  
  13.                                this);  
  14.     }  
  15.     @Override  
  16.     public Object invoke(Object proxy, Method method, Object[] args)  
  17.             throws Throwable {   //具体的处理策略 根据方法名判断  
  18.         // TODO Auto-generated method stub  
  19.         check();  
  20.         Object temp = method.invoke(this.obj, args);  
  21.         return temp;  
  22.     }  
  23.     public void check(){  
  24.         System.out.println("---check()---");  
  25.     }  
  26.   
  27. }  


测试代码

[java] view plain copy
  1. package com.itmyhome.manager;  
  2.   
  3. public class Client {  
  4.   
  5.     /** 
  6.      * @param args 
  7.      */  
  8.     public static void main(String[] args) {  
  9.         // TODO Auto-generated method stub  
  10.         ProxyHandler handler = new ProxyHandler();  
  11.         UserManager userManager = (UserManager)handler.createProxy(new UserManagerImpl());  
  12.         userManager.addUser();  
  13.         userManager.delUser(1);  
  14.     }  
  15.   
  16. }  

转载出处: http://blog.csdn.net/itmyhome1990/article/details/7171370



原创粉丝点击