posts - 241,  comments - 116,  trackbacks - 0

          動態代理: 代理類需要實現InvocationHandler接口。

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

          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) {  
                      //創建委托類實例,即被代理的類對象  
                      ServiceImpl target = new ServiceImpl();  
                      //創建動態代理類  
                      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 墻頭草 閱讀(571) 評論(0)  編輯  收藏

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


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 乡城县| 老河口市| 赤水市| 峨眉山市| 永平县| 内乡县| 梓潼县| 锡林郭勒盟| 车致| 宜阳县| 错那县| 喀什市| 滦南县| 襄汾县| 郯城县| 沁阳市| 许昌市| 绍兴县| 山阴县| 盘锦市| 葫芦岛市| 双江| 屏山县| 九江市| 页游| 五指山市| 盐亭县| 承德市| 怀化市| 南城县| 蓝田县| 建瓯市| 宝兴县| 大同市| 泰安市| 孝昌县| 习水县| 弥勒县| 元谋县| 都江堰市| 米林县|