posts - 241,  comments - 116,  trackbacks - 0

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

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

          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 返回委托類接口的實(shí)例對象
                   */  
                  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)建委托類實(shí)例,即被代理的類對象  
                      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("權(quán)限不夠");  
                      return result;  
                  }  
                  result = method.invoke(target, args);  
                  return result;  
              }  

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

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


          網(wǎng)站導(dǎo)航:
           
          人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
          主站蜘蛛池模板: 黄陵县| 尉氏县| 循化| 凭祥市| 柘城县| 和静县| 玛多县| 汾阳市| 台南县| 佛坪县| 忻城县| 金乡县| 永康市| 舟山市| 定边县| 高要市| 五河县| 开平市| 阜南县| 浏阳市| 壶关县| 临湘市| 乌兰浩特市| 阿勒泰市| 彭州市| 富宁县| 吉林市| 仙居县| 汉川市| 汕头市| 堆龙德庆县| 湄潭县| 罗定市| 济南市| 乐安县| 武平县| 贡山| 英吉沙县| 尚义县| 原平市| 山阴县|