您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        这篇文章将为大家详细讲解有关Java实现动态代理的方法有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
详解Java动态代理的实现及应用
Java动态代理其实写日常业务代码是不常用的,但在框架层一起RPC框架的客户端是非常常见及重要的。spring的核心思想aop的底层原理实现就使用到了java的动态代理技术。 
使用代理可以实现对象的远程调用以及aop的实现。 
java的动态代理的实现,主要依赖InvoctionHandler(接口)和Proxy(类)这两个。
下面是一个例子 
实现的代理的一般需要有个接口
package com.yasin.ProxyLearn;
public interface IStudy {
  public void learn();
  public String getKonwledge();
}该接口的实现的类
package com.yasin.ProxyLearn;
public class Study implements IStudy{
  public void learn() {
    System.out.println("我要开始学习了!");
  }
  public String getKonwledge() {
    return "Java真的强";
  }
}代理类,该类需要实现InvacationHandler接口
package com.yasin.ProxyLearn;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class StudyProxy implements InvocationHandler{
  //真实要被代理的对象
  private Object study;
  public StudyProxy(Object study){
    this.study=study;
  }
  /**
   * 当被代理对象执行自己的方法时,便会执行这个方法
   */
  public Object invoke(Object object, Method method, Object[] args) throws Throwable {
    Object obj=null;
    System.out.println("代理执行前我可以执行一些操作");
    //执行被代理对象的方法
    obj = method.invoke(study, args);
    System.out.println("代理执行后我还可以执行一些操作");
    return obj;
  }
}测试类
package com.yasin.JavaLearn;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import com.yasin.ProxyLearn.IStudy;
import com.yasin.ProxyLearn.Study;
import com.yasin.ProxyLearn.StudyProxy;
/**
 * Hello world!
 *
 */
public class App {
  public static void main(String[] args) {
    IStudy study = new Study();
    InvocationHandler handler = new StudyProxy(study);
    IStudy proxyStudy =(IStudy)Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[] {IStudy.class}, handler);
    proxyStudy.learn();
    System.out.println(proxyStudy.getKonwledge());
  }
}关于Java实现动态代理的方法有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。