码迷,mamicode.com
首页 > 其他好文 > 详细

jdk动态代理举例

时间:2017-12-24 18:53:49      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:this   err   invoke   代码   end   必须   cat   inter   over   

JDK动态代理是基于接口的代理,下面举例说明

  • 代理类:proxy,代理动作必须要基于一个proxy实例来执行
  • 代理执行类:实现InvocationHandler,案例中是TestInvocationHandler
  • 被代理类:基于接口的用户自己的方法,案例中是SayImpl

首先说明下InvocationHandler的invoke

public interface InvocationHandler {
  public Object invoke(Object proxy, Method method, Object[] args)
          throws Throwable;
}

proxy:方法基于哪个proxy实例来执行

method:执行proxy实例的哪个方法(proxy代理谁就执行谁的方法)

args:methed的入参

 

代码示例:

public interface Say {
    void sayHello(String words);
}
public class SayImpl implements Say {
    @Override
    public void sayHello(String words) {
        System.out.println("hello:" + words);
    }
}
public class TestInvocationHandler implements InvocationHandler {

    private Object target;
    public TestInvocationHandler(Object target) {
        this.target=target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("invoke begin");
        System.out.println("method :"+ method.getName()+" is invoked!");
        method.invoke(target,args);
        System.out.println("invoke end");
        return null;
    }
}
    public static void main(String[] args) {

        TestInvocationHandler testInvocationHandler = new TestInvocationHandler(new SayImpl());
        Say say = (Say)Proxy.newProxyInstance(SayImpl.class.getClassLoader(), SayImpl.class.getInterfaces(), testInvocationHandler );
        say.sayHello("my dear");
    }

 

执行结果:

invoke begin
method :sayHello is invoked!
hello:my dear
invoke end

 

jdk动态代理举例

标签:this   err   invoke   代码   end   必须   cat   inter   over   

原文地址:http://www.cnblogs.com/cishengchongyan/p/8098607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!