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();
}
/**
- 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="">
/**
<="" 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;">
/**
- 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");
}
}
<="" li="">
<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;
/**
- 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;
}
}
<="" li="">
<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;
/**
-
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();
}
}
<="" li="">
<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动态代理所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。