首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

设计方式之 动态代理

2012-11-09 
设计模式之 动态代理import java.lang.reflect.InvocationHandlerimport java.lang.reflect.Methodimpor

设计模式之 动态代理
import java.lang.reflect.InvocationHandler;   
  
import java.lang.reflect.Method;   
  
import java.lang.reflect.Proxy;   
  
    
  
    
  
public class SecurityHandler implements InvocationHandler {   
  
    
  
  private Object targetObject;   
  
    
  
  /*targetObjet 为要实例的JAVA类, 在这里指的就是 UserManagerImpl  
 
  调用代码写法:     
 
      SecurityHandler handler = new SecurityHandler();  
 
     UserManager userManager = (UserManager)handler.newProxy(new UserManagerImpl());  
 
     userManager.deleteUser(1);     
 
     
 
    在调用的时候,userManager 已经是个代理的类,调用里面的deletUser()方法时,他就会去调用invoke()方法  
 
  */  
  
     
  
public Object newProxy(Object targetObject) {   
  
  this.targetObject = targetObject;   
  
  return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),    
  
           targetObject.getClass().getInterfaces(),    
  
           this);   
  
}   
  
    
  
    
  
public Object invoke(Object proxy, Method method, Object[] args)   
  
   throws Throwable {   
  
        
  
  checkSecurity();                  //  关注点的具体实现  里面可以书写任何的检验代码   
  
    
  
  Object ret = null;   
  
  try {   
  
   ret = method.invoke(this.targetObject, args);      
  
  }catch(Exception e) {   
  
   e.printStackTrace();   
  
   throw new java.lang.RuntimeException(e);   
  
  }   
  
  return ret;   
  
}   
  
    
  
    
  
private void checkSecurity() {   
  
   //相应个性化的代码   
  
  System.out.println("----------checkSecurity()---------------");   
  
}   
  
    
  
}   
  

热点排行