Java JDK 动态代理的使用方法示例

 更新时间:2017年07月18日 10:25:27   作者:再见理想2017  
Java 动态代理机制以巧妙的方式近乎完美地实践了代理模式的设计理念。下面这篇文章主要给大家分享了关于Java JDK 动态代理的使用方法示例,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。

本文主要和大家分享介绍了关于Java JDK 动态代理使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

前言

代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。

Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现。

JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。

使用

首先创建接口

public interface Subject {

 void test();
}

创建实现类

public class SubjectImpl implements Subject {

 @Override
 public void test() {
 System.out.println("This is test method");
 }
}

创建InvocationHandler实现类

public class SubjectInvocationHandler implements InvocationHandler {

 private Subject target;

 public SubjectInvocationHandler(Subject subject) {
 this.target = subject;
 }

 @Override
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

 System.out.println("before method!");

 Object result = method.invoke(target, args);

 System.out.println("after method!");

 return result;
 }
}

最后调用:

public class DynamicProxy {


 public static void main(String args[]) {

 Subject subject = new SubjectImpl();

 Subject proxy = (Subject) Proxy.newProxyInstance(SubjectImpl.class.getClassLoader(), SubjectImpl.class.getInterfaces(), new SubjectInvocationHandler(subject));
 proxy.test();

 System.out.println(proxy);
 }
}

运行结果:

before method! 
This is test method 
after method! 

总结

1.通过实现InvocationHandler接口,在invoke方法中实现代理逻辑;

2.通过Proxy的newProxyInstance方法生成代理类,这里主要是根据被代理类的接口类型,通过反射创建代理类;

关于分析JDK动态代理这里有一篇很好的文章:Java JDK动态代理(AOP)的实现原理与使用详析

好了,以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Spring中的事件发布机制原理解析

    Spring中的事件发布机制原理解析

    这篇文章主要介绍了Spring中的事件发布机制原理解析,当我们关心spring容器什么时候刷新,或者想在spring容器刷新的时候做一些事情,监听关心的事件,主要就是在ApplicationListener中写对应的事件,需要的朋友可以参考下
    2023-11-11
  • java发送邮件及打开状态判断分析实例

    java发送邮件及打开状态判断分析实例

    这篇文章主要为大家介绍了java发送邮件及打开状态判断分析实例
    2023-12-12
  • java web个人通讯录系统设计

    java web个人通讯录系统设计

    这篇文章主要为大家详细介绍了java web个人通讯录系统设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • java多线程Thread的实现方法代码详解

    java多线程Thread的实现方法代码详解

    这篇文章主要介绍了java多线程Thread的实现方法代码详解,涉及start(),run(),stop(),interrupt(),isInterrupted(),join()和join(long millis)等方法的介绍,具有一定借鉴价值,需要的朋友可以了解下。
    2017-11-11
  • Java中继承、多态、重载和重写介绍

    Java中继承、多态、重载和重写介绍

    这篇文章主要介绍了Java中继承、多态、重载和重写介绍,需要的朋友可以参考下
    2014-07-07
  • SpringBoot自定义错误处理逻辑详解

    SpringBoot自定义错误处理逻辑详解

    这篇文章主要介绍了SpringBoot自定义错误处理逻辑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • Servlet系列两种创建方式

    Servlet系列两种创建方式

    本文主要介绍了Servlet系列两种创建方式,包含Servlet2.5之前使用和Servlet3.0后,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Spring Bean的定义及三种创建方式

    Spring Bean的定义及三种创建方式

    本文主要介绍了Spring容器获取Bean的9种方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Spring Boot定时器创建及使用解析

    Spring Boot定时器创建及使用解析

    这篇文章主要介绍了Spring Boot定时器创建及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Double.parseDouble()与Double.valueOf()的区别及说明

    Double.parseDouble()与Double.valueOf()的区别及说明

    这篇文章主要介绍了Double.parseDouble()与Double.valueOf()的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论