美文网首页
JDK动态代理实现原理

JDK动态代理实现原理

作者: zlb | 来源:发表于2016-08-08 19:51 被阅读254次

废话不多说了,先来看一下JDK的动态是怎么用的。

 package dynamic.proxy;   
import java.lang.reflect.InvocationHandler;  
import java.lang.reflect.Method;  
import java.lang.reflect.Proxy;  
/** 
 * 实现自己的InvocationHandler 
 * @author zyb 
 * @since 2012-8-9 
 * 
 */  
public class MyInvocationHandler implements InvocationHandler {  
    // 目标对象   
    private Object target;  
    /** 
     * 构造方法 
     * @param target 目标对象  
     */  
    public MyInvocationHandler(Object target) {  
        super();  
        this.target = target;  
    }   
    /** 
     * 执行目标对象的方法 
     */  
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
        // 在目标对象的方法执行之前简单的打印一下  
        System.out.println("------------------before------------------");         
        // 执行目标对象的方法  
        Object result = method.invoke(target, args);  
          
        // 在目标对象的方法执行之后简单的打印一下  
        System.out.println("-------------------after------------------"); 
        return result;  
    }    
    /** 
     * 获取目标对象的代理对象 
     * @return 代理对象 
     */  
    public Object getProxy() {  
        return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(),   
                target.getClass().getInterfaces(), this);  
    }  
}    
package dynamic.proxy;    
/** 
 * 目标对象实现的接口,用JDK来生成代理对象一定要实现一个接口 
 * @author zyb 
 * @since 2012-8-9 
 * 
 */  
public interface UserService {  
    /** 
     * 目标方法  
     */  
    public abstract void add();  
} 
package dynamic.proxy;   
/** 
 * 目标对象 
 * @author zyb 
 * @since 2012-8-9 
 * 
 */  
public class UserServiceImpl implements UserService {  
    /* (non-Javadoc) 
     * @see dynamic.proxy.UserService#add() 
     */  
    public void add() {  
        System.out.println("--------------------add---------------");  
    }  
}   
package dynamic.proxy;   
import org.junit.Test;  
/** 
 * 动态代理测试类 
 * @author zyb 
 * @since 2012-8-9 
 * 
 */  
public class ProxyTest {  
    @Test  
    public void testProxy() throws Throwable {  
        // 实例化目标对象  
        UserService userService = new UserServiceImpl();  
        // 实例化InvocationHandler  
        MyInvocationHandler invocationHandler = new MyInvocationHandler(userService);  
        // 根据目标对象生成代理对象  
        UserService proxy = (UserService) invocationHandler.getProxy();
        // 调用代理对象的方法  
        proxy.add();  
    }  
}  

相关文章

  • AOP——cglib动态代理源码解析

    上一篇分析了使用JDK动态代理的低层实现原理,这次再来看看cglib实现动态代理的原理。 关于JDK动态代理的实现...

  • 动态代理-jdk代理实现原理

    动态代理-jdk代理实现原理 JDK中提供了一个Proxy类用于实现动态代理,JDK的动态代理是基于接口实现的,被...

  • Java动态代理

    参考来源: Java动态代理视频 JDK动态代理实现原理 JDK Dynamic Proxies Building...

  • JDK和CGLIB动态代理区别

    JDK和CGLIB动态代理区别 一 JDK和CGLIB动态代理原理1、JDK动态代理利用拦截器(拦截器必须实现In...

  • Spring AOP --JDK动态代理方式

    我们知道Spring是通过JDK或者CGLib实现动态代理的,今天我们讨论一下JDK实现动态代理的原理。 一、简述...

  • Spring AOP --JDK动态代理方式

    我们知道Spring是通过JDK或者CGLib实现动态代理的,今天我们讨论一下JDK实现动态代理的原理。 一、简述...

  • Spring AOP --JDK动态代理方式

    我们知道Spring是通过JDK或者CGLib实现动态代理的,今天我们讨论一下JDK实现动态代理的原理。 一、简述...

  • Spring系列之AOP(1)—— JDK动态代理和CigLib

    1、JDK动态代理 JDK动态代理通过JDK的Proxy类实现,JDK提供的动态代理需要实现InvocationH...

  • 2018-09-16

    AOP的XML配置: AOP的先关术语: Spring底层的AOP实现原理 动态代理: JDK动态代理:只能对实现...

  • JDK动态代理实践与原理

    本篇内容 介绍JDK动态代理的基本概念 一些JDK动态代理的疑问 JDK动态代理的Demo JDK动态代理的原理 ...

网友评论

      本文标题:JDK动态代理实现原理

      本文链接:https://www.haomeiwen.com/subject/fnnzdttx.html