Android Open Source - Common-Library Proxy Usage






From Project

Back to project page Common-Library.

License

The source code is released under:

Apache License

If you think the Android project Common-Library listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.morgan.library.snippet;
// ww w .j a  v a  2  s  . com
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

/**
 * ??????????
 * 
 * @author Morgan.Ji
 * 
 */
public class ProxyUsage {

  /**
   * @param args
   */
  public static void main(String[] args) {
    testStaticProxy();
    testJDKProxy();
    testCGLibProxy();
  }

  private static void testStaticProxy() {
    Request req = new HttpRequest();
    RequestProxy proxy = new RequestProxy();
    proxy.buildProxy(req);
    proxy.request();
  }

  private static void testCGLibProxy() {
    Request req = new HttpRequest();
    JDKProxy proxy = new JDKProxy();
    Request reqProxy = (Request) proxy.createProxy(req);
    reqProxy.request();
  }

  private static void testJDKProxy() {
    Student stu = new Student();
    CGLibProxy proxy = new CGLibProxy();
    Student stuProxy = (Student) proxy.createProxy(stu);
    stuProxy.doSomeThing();
  }

}

interface Request {
  public void request();
}

class HttpRequest implements Request {

  @Override
  public void request() {
    System.out.println("http request......");
  }
}

/**
 * ???(?????????)
 * 
 * @author Morgan.Ji
 */
class RequestProxy implements Request {
  // ???????
  private Request req;

  public void buildProxy(Request req) {
    this.req = req;
  }

  @Override
  public void request() {
    // ?????
    doBefore();
    req.request();
    // ??????
    doAfter();
  }

  private void doAfter() {
    System.out.println("after method invoke");
  }

  private void doBefore() {
    System.out.println("before method invoke");
  }
}

/**
 * ????????
 * 
 * @author Morgan.Ji
 * 
 */
class JDKProxy implements InvocationHandler {
  private Object target;

  public Object createProxy(Object target) {
    this.target = target;
    return Proxy.newProxyInstance(target.getClass().getClassLoader(),
        target.getClass().getInterfaces(), this);
  }

  /**
   * @param proxy
   *            ???????
   * @param method
   *            ???????
   * @param args
   *            ??????????????
   *            ?????InvocationHandler???????????????????????????????ProxySubject
   */
  @Override
  public Object invoke(Object proxy, Method method, Object[] args)
      throws Throwable {

    Object retVal = null;
    // ?????
    doBefore();
    retVal = method.invoke(target, args);
    // ??????
    doAfter();
    return retVal;
  }

  private void doAfter() {
    System.out.println("after method invoke");
  }

  private void doBefore() {
    System.out.println("before method invoke");
  }
}

class Student {

  public void doSomeThing() {
    System.out.println("day day study,day day up...");
  }
}

/**
 * ??CGLib?????????
 * 
 */
class CGLibProxy implements MethodInterceptor {
  // ???????????
  private Object obj;
  private Enhancer enhancer = new Enhancer();

  public Object createProxy(Object target) {
    this.obj = target;
    enhancer.setSuperclass(this.obj.getClass());// ????????
    enhancer.setCallback(this);// ????
    enhancer.setClassLoader(target.getClass().getClassLoader());
    return enhancer.create();
  }

  /**
   * ?????????????????????
   * 
   * @param proxy
   *            ?????
   * @param method
   *            ????????
   * @param params
   *            ??????????
   * @param methodProxy
   */
  @Override
  public Object intercept(Object proxy, Method method, Object[] params,
      MethodProxy methodProxy) throws Throwable {
    Object result = null;
    // ?????
    doBefore();
    // ?????????
    result = methodProxy.invokeSuper(proxy, params);
    // ??????
    doAfter();
    return result;
  }

  private void doAfter() {
    System.out.println("after method invoke");
  }

  private void doBefore() {
    System.out.println("before method invoke");
  }

}




Java Source Code List

com.morgan.library.app.APPContext.java
com.morgan.library.app.AppManager.java
com.morgan.library.app.BaseActivity.java
com.morgan.library.app.BaseFragmentActivity.java
com.morgan.library.app.BaseListActivity.java
com.morgan.library.app.BaseScreenShotActivity.java
com.morgan.library.app.CommonApplication.java
com.morgan.library.async.CustomAsyncTask.java
com.morgan.library.async.Destroyable.java
com.morgan.library.async.IFeedback.java
com.morgan.library.async.TaskManager.java
com.morgan.library.model.NetResult.java
com.morgan.library.model.SpinnerItem.java
com.morgan.library.model.WeatherType.java
com.morgan.library.model.Weather.java
com.morgan.library.net.ApiClient.java
com.morgan.library.net.ApiManager.java
com.morgan.library.net.ApiUrl.java
com.morgan.library.net.IApiClient.java
com.morgan.library.net.JsonUtils.java
com.morgan.library.net.MockApiClient.java
com.morgan.library.service.LocationManager.java
com.morgan.library.service.WeatherManager.java
com.morgan.library.snippet.CookieShare.java
com.morgan.library.snippet.CustomService.java
com.morgan.library.snippet.ExceptionCatcher.java
com.morgan.library.snippet.ProxyUsage.java
com.morgan.library.snippet.SocketClient.java
com.morgan.library.snippet.SocketServer.java
com.morgan.library.snippet.UDPClient.java
com.morgan.library.snippet.UDPServer.java
com.morgan.library.snippet.XMLAnalyze.java
com.morgan.library.task.GetWeatherTask.java
com.morgan.library.utils.AppUtils.java
com.morgan.library.utils.DateUtils.java
com.morgan.library.utils.DensityUtils.java
com.morgan.library.utils.FileUtils.java
com.morgan.library.utils.GB2Alpha.java
com.morgan.library.utils.HttpClientUtil.java
com.morgan.library.utils.HttpClientUtils.java
com.morgan.library.utils.HttpURLUtil.java
com.morgan.library.utils.ImageUtils.java
com.morgan.library.utils.KeyBoardUtils.java
com.morgan.library.utils.LocationUtils.java
com.morgan.library.utils.Logger.java
com.morgan.library.utils.NetUtils.java
com.morgan.library.utils.PhoneUtils.java
com.morgan.library.utils.SDCardUtils.java
com.morgan.library.utils.StrUtils.java
com.morgan.library.widget.AutoHideMenuWidget.java
com.morgan.library.widget.BadgeView.java
com.morgan.library.widget.CityPickerWidget.java
com.morgan.library.widget.CustomGridView.java
com.morgan.library.widget.CustomListView.java
com.morgan.library.widget.CustomToast.java
com.morgan.library.widget.CustomViewPager.java
com.morgan.library.widget.DatePickerWidget.java
com.morgan.library.widget.DirectionScrollView.java
com.morgan.library.widget.FallBallView.java
com.morgan.library.widget.HeightPickerWidget.java
com.morgan.library.widget.InterceptPressLayout.java
com.morgan.library.widget.ItalicTextView.java
com.morgan.library.widget.PopupMenuWidget.java
com.morgan.library.widget.PullToRefreshListView.java
com.morgan.library.widget.ScreenShotView.java
com.morgan.library.widget.SexPickerWidget.java
com.morgan.library.widget.SlideUpOpenWidget.java
com.morgan.library.widget.SwipeListView.java
com.morgan.library.widget.TimePickerWidget.java
com.morgan.library.widget.TouchZoomImageView.java
com.morgan.library.widget.WaitScreenWidget.java
com.morgan.library.widget.WebViewDialog.java
com.morgan.library.widget.WeightPickerWidget.java
com.morgan.library.widget.calendar.CalendarGridView.java
com.morgan.library.widget.calendar.CalendarScrollView.java
com.morgan.library.widget.calendar.CalendarViewFlipper.java
com.morgan.library.widget.calendar.CalendarWidget.java
com.morgan.library.widget.numberpicker.NumberPicker.java
com.morgan.library.widget.numberpicker.Scroller.java
com.morgan.library.widget.slidemenu.ScrollDetectorFactory.java
com.morgan.library.widget.slidemenu.ScrollDetectors.java
com.morgan.library.widget.slidemenu.SlideMenu.java