-->
  • 39141

    文章

  • 313

    评论

  • 27

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

JDK的动态代理基本实现

喜欢本站的朋友可以收藏本站,或者加入QQ群:172816590Web网页设计师,我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

动态,指的是代理类实在程序运行时创建的,而不是在程序运行前手动编码来定义代理类的。这些动态代理类是在运行时候根据我们在JAVA代码中的“指示”动态生成的。动态代理的使用方式呢,主要就是分为两种:一种是基于接口的代理;另一种则是基于类的代理。

基于接口的代理,就是jdk自带的动态代理规则的实现方式,后者则是基于一些字节类增强的类代理,如cglib,javassist等。
jdk代理最主要的就是三个类:目标接口,目标类(实现了目标接口),扩展处理器InvocationHandler类。

1.创建被代理的接口和类

//目标接口
public interface HelloInterfece {
    public void sayHello();
}

//目标类
public class HelloInterfeceImpl implements HelloInterfecr {
    @Override
    public void sayHello() {
        System.out.println("say..hello...");
    }
}

//扩展处理器
2.创建代理类实现InvocationHandler 接口
public class HelloProxy implements InvocationHandler {
    private Object target;
    public HelloProxy(Object target) {
        this.target = target;
    }
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("----代理前----");
        Object result=method.invoke(target,args);
        System.out.println("-----代理后----");
        return result;
    }
}

3.编写测试类
public class HelloProxyTest {

    public static void main(String[] args) {
        //实例化被代理对象
        HelloInterfecr helloInterfece = new HelloInterfeceImpl();
        //实例化代理对象
        HelloProxy helloProxy = new HelloProxy(helloInterfece);
        //建立代理关系
        HelloInterfecr helloInterfeceImpl = (HelloInterfecr) Proxy.newProxyInstance(helloInterfece.getClass().getClassLoader(), helloInterfece.getClass().getInterfaces(), helloProxy);
        //调用方法
        helloInterfeceImpl.sayHello();
    }
}



您觉喜欢本网站,或者觉得本文章对您有帮助,那么可以选择打赏。
打赏多少,您高兴就行,谢谢您对梁钟霖这小子的支持! ~(@^_^@)~

  • 微信扫一扫

    微信打赏
  • 支付宝扫一扫

    支付宝打赏
转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤