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
分享
二维码
< <上一篇
下一篇>>