首页 > 其他 > 详细

JDK动态代理例子

时间:2015-07-28 23:00:39      阅读:263      评论:0      收藏:0      [点我收藏+]

JDK动态代理的代理类必须实现于接口。如果要代理类,则使用CGLIB代理。

先定义一个接口:

public interface Character {
    public void show();
}

接着定义一个类:

public class A implements Character{

    @Override
    public void show() {
        // TODO Auto-generated method stub
        System.out.println("this is A");
    }
    
}

定义的代理类要实现InvocationHandler接口:

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


public class JdkProxy implements InvocationHandler{
    private Object delegate;
    public Object bind(Object delegate){
        this.delegate = delegate;
     //利用反射机制生成一个代理对象
return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object result = null;
      System.out.println(
"JdkProxy invoke");
     //此处是调用了目标类的方法,所以在该方法执行的前后可以插入其他的事务逻辑,并且可以更改传入的参数和返回的结果 result
= method.invoke(delegate, args); return result; } }

例子:

public static void main(String[] args){
        Character c = (Character)((new JdkProxy()).bind(new A()));
        c.show();
    }

打印的结果:

JdkProxy invoke
this is A

 

JDK动态代理例子

原文:http://www.cnblogs.com/agindage/p/4684377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!