posts - 241,  comments - 116,  trackbacks - 0

          動態(tài)代理: 代理類需要實現(xiàn)InvocationHandler接口。

          使用場合舉例: 如果需要委托類處理某一業(yè)務,那么我們就可以先在代理類中,對客戶的權限、各類信息先做判斷,如果不滿足某一特定條件,則將其攔截下來,不讓其代理。

          ServiceProxy.java

              package com.ibm.dynamicproxy;  
                
              import java.lang.reflect.InvocationHandler;  
              import java.lang.reflect.Method;  
              import java.lang.reflect.Proxy;  
                
              public class ServiceProxy implements InvocationHandler {  
                
                  private Object target;  
                    
                  public ServiceProxy(Object target){  
                      this.target = target;  
                  }  
                    
                  @Override  
                  public Object invoke(Object proxy, Method method, Object[] args)  
                          throws Throwable {  
                      Object result = null;  
                      result = method.invoke(target, args);  
                      return result;  
                  }  
                    
                  /**
                   * @param target
                   * @return 返回委托類接口的實例對象
                   */  
                  public Object getProxyInstance(){  
                      return Proxy.newProxyInstance(target.getClass().getClassLoader(),   
                              target.getClass().getInterfaces(), this);  
                  }  
              }  
          ServiceTest.java(測試類)

              package com.ibm;  
                
              import com.ibm.delegate.Service;  
              import com.ibm.delegate.ServiceImpl;  
              import com.ibm.dynamicproxy.ServiceProxy;  
                
              public class ServiceTest {  流行線
                
                  /**
                   * @param args
                   */  
                  public static void main(String[] args) {  
                      //創(chuàng)建委托類實例,即被代理的類對象  
                      ServiceImpl target = new ServiceImpl();  
                      //創(chuàng)建動態(tài)代理類  
                      ServiceProxy proxy = new ServiceProxy(target);  
                      Service service = (Service) proxy.getProxyInstance();  
                      String date = service.queryDate();  
                      System.out.println(date);  
                      int result = service.sub(10, 20);  
                      System.out.println("10-20 = "+result);  
                  }  
              }  

          修改兩個方法,做測試:

          ServiceImpl.java


              public String ownMethod(){  
                  System.out.println("It's my own method");  
                  return "user";  
              }  
          ServiceProxy.java

              @Override  
              public Object invoke(Object proxy, Method method, Object[] args)  
                      throws Throwable {  
                  Object result = null;  
                  if(!(target instanceof ServiceImpl)){  
                      System.out.println("不能代理該對象");  
                      return result;  
                  }else if(!((ServiceImpl)target).ownMethod().equals("admin")){  
                      System.out.println("權限不夠");  
                      return result;  
                  }  
                  result = method.invoke(target, args);  
                  return result;  
              }  

          posted on 2012-06-27 15:36 墻頭草 閱讀(565) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          人人游戲網 軟件開發(fā)網 貨運專家
          主站蜘蛛池模板: 蒙山县| 隆尧县| 安徽省| 舞钢市| 乐平市| 阳朔县| 甘泉县| 奉节县| 江津市| 辰溪县| 南岸区| 汤阴县| 农安县| 治多县| 台湾省| 庆云县| 巴彦县| 五寨县| 凤冈县| 海宁市| 台湾省| 曲靖市| 法库县| 天峨县| 务川| 巩义市| 若尔盖县| 葫芦岛市| 五大连池市| 土默特左旗| 凤台县| 咸阳市| 贡嘎县| 渭源县| 定结县| 永平县| 洛隆县| 卓尼县| 扶风县| 罗田县| 曲阜市|