iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >JAVA的动态代理详解
  • 513
分享到

JAVA的动态代理详解

java开发语言 2023-08-31 19:08:10 513人浏览 泡泡鱼
摘要

文章目录 前言一、动态是什么?二、使用步骤1.导入相应的包2.定义接口3.定义接口实现类4.实现InvocationHandler接口5.实现代理 三、整体实例四、输出结果总结 前言

文章目录


前言

动态代理提供了一种灵活且非侵入式的方式,可以对对象的行为进行定制和扩展。它在代码重用、解耦和业务逻辑分离、性能优化以及系统架构中起到了重要的作用。

增强对象的功能:通过动态代理,可以在不修改原始对象的情况下,对其方法进行增强或添加额外的行为。可以在方法执行前后进行一些操作,比如日志记录、性能监测、事务管理等。

解耦和业务逻辑分离:动态代理可以将对象的特定操作从业务逻辑中解耦,使得代码更加模块化和可维护。代理对象可以负责处理一些通用的横切关注点,而业务对象可以专注于核心业务逻辑。

实现懒加载:通过动态代理,可以延迟加载对象,只有在真正需要使用对象时才会进行创建和初始化,从而提高性能和资源利用效率。

实现远程方法调用:动态代理可以用于实现远程方法调用(rpc)和分布式系统中的服务代理。客户端通过代理对象调用远程服务,并隐藏了底层网络通信的细节。

实现AOP编程:动态代理是实现面向切面编程(aop)的基础。通过代理对象,可以将横切关注点(如日志、事务、安全性)与业务逻辑进行解耦,提供更高层次的模块化和可重用性。


一、动态是什么?

动态代理是一种设计模式,它允许在运行时创建代理对象,并将方法调用重定向到不同的实际对象。它使我们能够在不修改现有代码的情况下增加或改变某个对象的行为。

二、使用步骤

1.导入相应的包

在Java中,可以使用Java的反射机制来实现动态代理。Java提供了java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口来实现动态代理。

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

2.定义接口

// 定义接口interface UserService {    void addUser(String username);}

3.定义接口实现类

// 实现接口的具体类class UserServiceImpl implements UserService {    public void addUser(String username) {        System.out.println("添加用户:" + username);    }}

4.实现InvocationHandler接口

// 实现InvocationHandler接口class MyInvocationHandler implements InvocationHandler {// 声明一个私有变量    private Object target;// 构造函数    public MyInvocationHandler(Object target) {        this.target = target;    }//  实现InvocationHandler接口的invoke方法,该方法在代理对象调用方法时被触发。    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;    }}

这段代码实现了InvocationHandler接口,它是实现动态代理的关键部分。

5.实现代理

public class DynamicProxyExample {    public static void main(String[] args) {        // 创建目标对象        UserService userService = new UserServiceImpl();        // 创建InvocationHandler实例        MyInvocationHandler handler = new MyInvocationHandler(userService);        // 创建动态代理对象        UserService proxy = (UserService) Proxy.newProxyInstance(                userService.getClass().getClassLoader(),                userService.getClass().getInterfaces(),                handler        );        // 通过代理对象调用方法        proxy.addUser("Alice");    }}

三、整体实例

import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;// 定义接口interface UserService {    void addUser(String username);}// 实现接口的具体类class UserServiceImpl implements UserService {    public void addUser(String username) {        System.out.println("添加用户:" + username);    }}// 实现InvocationHandler接口class MyInvocationHandler implements InvocationHandler {    private Object target;    public MyInvocationHandler(Object target) {        this.target = target;    }    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;    }}public class DynamicProxyExample {    public static void main(String[] args) {        // 创建目标对象        UserService userService = new UserServiceImpl();        // 创建InvocationHandler实例        MyInvocationHandler handler = new MyInvocationHandler(userService);        // 创建动态代理对象        UserService proxy = (UserService) Proxy.newProxyInstance(                userService.getClass().getClassLoader(),                userService.getClass().getInterfaces(),                handler        );        // 通过代理对象调用方法        proxy.addUser("Alice");    }}

四、输出结果

动态代理前置操作添加用户:Alice动态代理后置操作

总结

动态代理在许多地方都有用处,比如日志记录、性能监测、权限验证等。这种动态代理的设计模式使得我们能够以一种非侵入式的方式对对象的行为进行定制和扩展,提供了更高的灵活性和可维护性。

来源地址:https://blog.csdn.net/biyn9/article/details/131352424

--结束END--

本文标题: JAVA的动态代理详解

本文链接: https://www.lsjlt.com/news/386781.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA的动态代理详解
    文章目录 前言一、动态是什么?二、使用步骤1.导入相应的包2.定义接口3.定义接口实现类4.实现InvocationHandler接口5.实现代理 三、整体实例四、输出结果总结 前言...
    99+
    2023-08-31
    java 开发语言
  • Java的动态代理和静态代理详解
    目录0、代理模式1、静态代理2、 加深理解3、动态代理动态代理的例子总结0、代理模式 为什么要学习代理模式?这是SpringAOP的底层【SpringAOP和SpringMVC】 代...
    99+
    2022-11-13
  • JAVA代理,静态,动态详解
    目录代理静态代理动态代理JDK动态代理CGLib动态代理总结代理 为其他对象提供一种代理以控制这个对象的访问,在某些情况下一个对象不能直接访问那个对象时,代理就起到了客户端和被代理对...
    99+
    2022-11-12
  • 详解java 中的动态代理
    这期内容当中小编将会给大家带来有关详解java 中的动态代理,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java动态代理相关先来看静态代理模式代码:package test; public inter...
    99+
    2023-05-31
    java 动态代理 ava
  • java jdk动态代理详解
    jdk动态代理要对一个类进行代理,被代理的类必须实现至少一个接口,并且只有接口中的方法才能被代理。 jdk实现动态代理一般分为三步: 1. 编写接口和实现类。 2. 写一个处理器,该...
    99+
    2022-11-15
    java jdk 动态代理
  • Java动态代理的示例详解
    目录定义分类案例需求方案一:jdk动态代理方案二:cglib动态代理分析总结定义 动态代理指的是,代理类和目标类的关系在程序运行的时候确定的,客户通过代理类来调用目标对象的方法,是在...
    99+
    2022-11-13
  • Java静态代理与动态代理案例详解
    代理模式 代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象...
    99+
    2022-11-12
  • 详解Java的Proxy动态代理机制
    目录一、Jvm加载对象二、代理模式2.1、基本描述2.2、静动态模式三、静态代理四、动态代理4.1、场景描述4.2、基础API案例4.3、代理类结构4.4、JDK源码五、源代码地址一...
    99+
    2022-11-12
  • 详解Java Proxy动态代理机制
    一、Jvm加载对象 在说Java动态代理之前,还是要说一下Jvm加载对象的过程,这个依旧是理解动态代理的基础性原理: Java类即源代码程序.java类型文件,经过编译器编译之后就...
    99+
    2022-11-12
  • Java实现JDK动态代理的原理详解
    目录概念案例静态代理JDK动态代理模式原理分析真相大白概念 代理:为控制A对象,而创建出新B对象,由B对象代替执行A对象所有操作,称之为代理。一个代理体系建立涉及到3个参与角色:真实...
    99+
    2022-11-13
  • jdk动态代理和cglib动态代理详解
    目录静态代理基于继承的方式实现静态代理基于聚合的方式实现静态代理继承与聚合方式实现的静态代理对比动态代理JDK动态代理如何实现一个HashMap的动态代理类?Cglib动态代理JDK...
    99+
    2022-11-12
  • Java动态代理机制的实例详解
     Java动态代理机制在学习spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功...
    99+
    2023-05-31
    java 动态代理 ava
  • Java基础之动态代理Cglib详解
    目录一、前言二、服务三、代理工厂四、结果一、前言 经测试,jdk创建对象的速度远大于cglib,这是由于cglib创建对象时需要操作字节码。cglib执行速度略大于jdk,所以比较适...
    99+
    2022-11-12
  • 代理模式:JAVA静态代理和动态代理的实例和实现详解
    目录前言静态代理实现简述创建human接口创建接口实现类创建针对接口实现增强操作的代理代理实现效果动态代理实现简述要点:向上转型创建YoungMan接口创建两个接口实现类创建动态代理...
    99+
    2022-11-12
  • Java中JDK动态代理的超详细讲解
    目录1. 什么是动态代理?2.动态代理的实现方式有几种?3. JDK动态代理4. CGLB动态代理5.动态代理的效率6.为什么要使用动态代理呢?7. JDK动态代理详细使用介绍总结1...
    99+
    2022-11-13
    Java jdk动态代理 java动态代理原理 jdk动态代理是如何实现的
  • Spring静态代理和动态代理代码详解
    本节要点:Java静态代理Jdk动态代理1 面向对象设计思想遇到的问题在传统OOP编程里以对象为核心,并通过对象之间的协作来形成一个完整的软件功能,由于对象可以继承,因此我们可以把具有相同功能或相同特征的属性抽象到一个层次分明的类结构体系中...
    99+
    2023-05-30
    spring 静态代理 动态代理
  • Java 静态代理与动态代理解析
    目录一、代码实践静态代理动态代理二、常见的动态代理场景Retrofit中的动态代理使用动态代理实现 onClick注入三、源码探索 Jdk 中的动态代理生成代理类四、总结静态代理: ...
    99+
    2022-11-13
  • java动态代理(jdk与cglib)详细解析
    JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息...
    99+
    2022-11-15
    java jdk cglib
  • Java反射(JDK)与动态代理(CGLIB)详解
    目录一、反射二、动态代理1、JDK代理2、CGLIB代理3、JDK代理与CGLIB代理对比总结一、反射 概念:在运行状态中,对于任意的一个类,都能够知道这个类的所有字段和方法,对任意...
    99+
    2022-11-12
  • 详解Java中的反射机制和动态代理
    目录一、反射概述二、反射之Class类2.1、初识Class类2.2、Class有下面的几个特点2.3、获取Class类实例2.4、关于包装类的静态属性2.5、通过Class类的其他...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作