返回顶部
首页 > 资讯 > 精选 >Java动态代理如何实现
  • 730
分享到

Java动态代理如何实现

2023-06-30 18:06:02 730人浏览 独家记忆
摘要

本篇内容介绍了“Java动态代理如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!jdk动态代理:利用反射机制生成一个实现代理接口的匿名

本篇内容介绍了“Java动态代理如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

jdk动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。

CGlib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

区别:JDK代理只能对实现接口的类生成代理;CGlib是针对类实现代理,对指定的类生成一个子类,并覆盖其中的方法,这种通过继承类的实现方式,不能代理final修饰的类。

强制使用CGlib

<!-- proxy-target-class="false"默认使用JDK动态代理 --><aop:aspectj-autoproxy proxy-target-class="true"/><aop-config proxy-target-class="true">

具体代码示例:

public interface UserManager {        public void addUser(String id, String passWord);        public void delUser(String id);    }
public class UserManagerImpl implements UserManager {        @Override    public void addUser(String id, String password) {            System.out.println("调用了UserManagerImpl.addUser()方法!");    }        @Override    public void delUser(String id) {            System.out.println("调用了UserManagerImpl.delUser()方法!");    }    }
public class JDKProxy implements InvocationHandler {        // 需要代理的目标对象    private Object targetObject;        public Object newProxy(Object targetObject) {        // 将目标对象传入进行代理            this.targetObject = targetObject;        // 返回代理对象         return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);    }        // invoke方法    @Override    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {        // 进行逻辑处理的函数        checkPopedom();        Object ret = null;        // 调用invoke方法        ret = method.invoke(targetObject, args);        return ret;    }        private void checkPopedom() {        // 模拟检查权限           System.out.println("检查权限:checkPopedom()!");        }    }
 public class CGLibProxy implements MethodInterceptor {        // CGlib需要代理的目标对象    private Object targetObject;    public Object createProxyObject(Object obj) {        this.targetObject = obj;        Enhancer enhancer = new Enhancer();        enhancer.setSuperclass(obj.getClass());        enhancer.setCallback(this);        Object proxyObj = enhancer.create();        return proxyObj;    }    @Override    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {        Object obj = null;        // 过滤方法        if ("addUser".equals(method.getName())) {            // 检查权限            checkPopedom();        }        obj = method.invoke(targetObject, args);        return obj;    }        private void checkPopedom() {        System.out.println("检查权限:checkPopedom()!");    }}
public class ProxyTest {    public static void main(String[] args) {        UserManager userManager = (UserManager)new CGLibProxy().createProxyObject(new UserManagerImpl());        System.out.println("CGLibProxy:");        userManager.addUser("tom", "root");        System.out.println("JDKProxy:");        JDKProxy jdkProxy = new JDKProxy();        UserManager userManagerJDK = (UserManager)jdkProxy.newProxy(new UserManagerImpl());        userManagerJDK.addUser("tom", "root");    }}

// 运行结果
CGLibProxy:
检查权限checkPopedom()!
调用了UserManagerImpl.addUser()方法!
JDKProxy:
检查权限checkPopedom()!
掉用了UserManagerImpl.addUser()方法!

“Java动态代理如何实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java动态代理如何实现

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

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

猜你喜欢
  • Java动态代理如何实现
    本篇内容介绍了“Java动态代理如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!JDK动态代理:利用反射机制生成一个实现代理接口的匿名...
    99+
    2023-06-30
  • Java如何实现JDK动态代理
    这篇文章主要讲解了“Java如何实现JDK动态代理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java如何实现JDK动态代理”吧!概念代理:为控制A对象,而创建出新B对象,由B对象代替执行...
    99+
    2023-07-02
  • JAVA如何实现动态代理技术
    这篇文章主要为大家展示了“JAVA如何实现动态代理技术”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JAVA如何实现动态代理技术”这篇文章吧。一、引出动态代理生活中代理应该是很常见的,比如你可以...
    99+
    2023-05-30
    java
  • java动态代理实现代码
    目录1、代理模式2、动态代理3、原理研究4、应用5、总结1、代理模式 代理模式是常用的设计模式之一,也是开发中常见的设计模式。 简单的描述一下,代理模式就是将实现类隔离开,比如你想给...
    99+
    2024-04-02
  • 如何进行Java代理设计模式的静态代理和动态代理实现
    今天就跟大家聊聊有关如何进行Java代理设计模式的静态代理和动态代理实现,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。面试问题:Java里的代理设计模式一共有几种实现方式?这个题目很...
    99+
    2023-06-02
  • Java实现动态代理的实例代码
    目录前言静态代理 动态代理 CGLib实现动态代理 总结前言 动态代理在Java中有着广泛的应用,比如Spring AOP、Hibernate数据查询、测试框架的后端mock、RPC...
    99+
    2024-04-02
  • 浅谈Java动态代理的实现
    目录一、代理设计模式1.1 什么是代理1.2 代理模式入门二、Java代理的三种实现2.1 静态代理2.2 Java自带的动态代理2.3 cglib实现动态代理三...
    99+
    2024-04-02
  • Java中怎么实现动态代理
    今天就跟大家聊聊有关Java中怎么实现动态代理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、概述 代理是一种设计模式,其目的是为其他对象提供一个代理以控制对某个对象的访问,代理类...
    99+
    2023-06-17
  • java动态代理的实现方法
    这篇文章主要介绍“java动态代理的实现方法”,在日常操作中,相信很多人在java动态代理的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java动态代理的实现方法”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-20
  • java proxy动态代理怎么实现
    在Java中,可以通过使用`java.lang.reflect.Proxy`类来实现动态代理。首先,需要定义一个接口,代表被代理类和...
    99+
    2023-09-09
    java
  • 使用Java怎么实现静态代理和动态代理
    本篇文章为大家展示了使用Java怎么实现静态代理和动态代理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。代理模式代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。主要解决:在直接...
    99+
    2023-06-14
  • Spring源码如何实现动态代理
    小编给大家分享一下Spring源码如何实现动态代理,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!注:这里不阐述Spring和AOP的一些基本概念和用法,直接进入正题。流程  Spring所管理的对象大体会经过确定实例化对象...
    99+
    2023-06-14
  • Java动态代理实现_动力节点Java学院整理
    动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程。通常情况下,代理模式中的每一个代理类在编译之后都会生成一个class文件,代理类所实现的接口和所代理的...
    99+
    2023-05-31
    java 动态代理 ava
  • 怎么在java中实现动态代理
    这篇文章给大家介绍怎么在java中实现动态代理,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。1、说明代...
    99+
    2023-06-14
  • Java动态代理模式怎么实现
    这篇文章主要介绍“Java动态代理模式怎么实现”,在日常操作中,相信很多人在Java动态代理模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java动态代理模式怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • 代理模式:JAVA静态代理和动态代理的实例和实现详解
    目录前言静态代理实现简述创建human接口创建接口实现类创建针对接口实现增强操作的代理代理实现效果动态代理实现简述要点:向上转型创建YoungMan接口创建两个接口实现类创建动态代理...
    99+
    2024-04-02
  • Mapper动态代理如何在Mybatis中实现
    Mapper动态代理如何在Mybatis中实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、实现原理     &nbs...
    99+
    2023-05-31
    mybatis mapper pp
  • java动态代理
    生成步骤 1. Proxy.newProxyInstance2. Constructor cons = getProxyConstructor(caller, loader, interfaces);3. (ld, clv) -> new ...
    99+
    2023-08-30
    java python 开发语言
  • Java动态代理与静态代理实例分析
    这篇文章主要介绍了Java动态代理与静态代理实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java动态代理与静态代理实例分析文章都会有所收获,下面我们一起来看看吧。一、静态代理静态代理的使用静态代理,代...
    99+
    2023-07-02
  • JDK动态代理,代理接口没有实现类,实现动态代理方式
    目录JDK动态代理,代理接口没有实现类,实现动态代理被代理的接口:代理对象:那么接下来测试一下:jdk动态代理为什么要接口先通过一个简单例子实现功能:编写测试方法:里面的getPro...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作