Java Dynamic Proxy

< span style="color:rgb(123,12,0);"> 1. What is agency

/**

  • Created by cxh on 17/3/26.
  • 微商和委托方的公共接口
    */
    public interface Sell {
    void sell();
    void add();
    }


/**

    <="" li="">
  • Created by cxh on 17/3/26.
  • 委托方实现接口方法
    */
    public class Vender implements Sell{
    @Override
    public void sell(){
    System.out.println("in sell method");
    }
    @Override
    public void add(){
    System.out.println("in add method");
    }
    }


/**

    <="" li="">
  • Created by cxh on 17/3/26.

  • 代理类实现接口sell方法
    */
    public class BusinessAgent implements Sell{
    private Vender vender;

    public BusinessAgent(Vender v){
    this.vender=v;
    }
    @Override
    public void sell(){
    vender.sell();
    }
    @Override
    public void add(){
    vender.add();
    }
    }

 



/**

    <="" li="">
  • Created by cxh on 17/3/26.
  • 委托方/代理 共同大家的接口
    */
    public interface Sell {
    void sell();
    void add();
    }

<pre style="font-family:Menlo;"><span style="font-size:14px;">4.2 vender类,委托方代码如下:

<pre style="font-family:Menlo;"><span style="font-size:14px;">



/**

    <="" li="">
  • Created by cxh on 17/3/26.
  • 委托方,供应商
    */
    public class Vender implements Sell {
    public void sell(){
    System.out.println("this is sell method");
    }
    public void add(){
    System.out.println("this is add method");
    }
    }

<pre style="font-family:Menlo;"><span style="font-size:14px;">4.3 代理类<span style="color:rgb(62,sans-serif;font-size:18px;">DynamicProxy代码如下:

<pre style="font-family:Menlo;"><span style="font-size:14px;"><span style="color:rgb(62,sans-serif;font-size:18px;">



import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**

    <="" li="">
  • Created by cxh on 17/3/26.
  • 中介类,调用处理器
    */
    public class DynamicProxy implements InvocationHandler {
    private Object obj;//obj为动态代理对象
    public DynamicProxy(Object obje){this.obj=obje;}
    //参数说明:object为代理方对象,method调用的代理方的方法,args为调用的代理方方法的参数
    @Override
    public Object invoke(Object object,Object[] args) throws Throwable{
    System.out.println("before");
    Object result=method.invoke(obj,args);
    System.out.println("after");
    return result;
    }
    }

<pre style="font-family:Menlo;"><span style="font-size:14px;"><span style="color:rgb(62,sans-serif;font-size:18px;">4.4 测试类MainTest代码如下:

<pre style="font-family:Menlo;"><span style="font-size:14px;"><span style="color:rgb(62,sans-serif;font-size:18px;">



import java.lang.reflect.Proxy;

/**

    <="" li="">
  • Created by cxh on 17/3/26.
    */
    public class MainTest {
    public static void main(String[] args) {
    //创建中介类实类
    DynamicProxy dynamicProxy=new DynamicProxy(new Vender());

     //<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a>代理<a href="https://www.jb51.cc/tag/leishili/" target="_blank" class="keywords">类实例</a>sell
     //在下<a href="https://www.jb51.cc/tag/daima/" target="_blank" class="keywords">代码</a>中,我们<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>Proxy类的newProxyInstance<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a>来<a href="https://www.jb51.cc/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="https://www.jb51.cc/tag/yige/" target="_blank" class="keywords">一个</a>代理<a href="https://www.jb51.cc/tag/leishili/" target="_blank" class="keywords">类实例</a>。
     //          这个代理类实现了我们指定的接口并且会把<a href="https://www.jb51.cc/tag/fangfa/" target="_blank" class="keywords">方法</a><a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>分发到指定的<a href="https://www.jb51.cc/tag/diaoyong/" target="_blank" class="keywords">调用</a>处理器。
     Sell sell=(Sell)(Proxy.newProxyInstance(Sell.class.getClassLoader(),new Class[]{Sell.class},dynamicProxy));
     sell.add();
     sell.sell();

    }
    }

<pre style="font-family:Menlo;"><span style="font-size:14px;"><span style="color:rgb(62,sans-serif;font-size:18px;">4.5 运行结果如下:

<pre style="font-family:Menlo;"><span style="font-size:14px;"><span style="color:rgb(62,sans-serif;font-size:18px;">



<="" li="">Process finished with exit code 0



总结

以上是编程之家为你收集整理的Java动态代理全部内容,希望文章能够帮你解决Java动态代理所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

编程之家官方1群

编程之家官方2群



The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>