iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何获得spring代理对象的原对象
  • 274
分享到

如何获得spring代理对象的原对象

2024-04-02 19:04:59 274人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

获得spring代理对象的原对象 看代码吧: @SuppressWarnings({"unchecked"}) protected <T> T getTargetOb

获得spring代理对象的原对象

看代码吧:


@SuppressWarnings({"unchecked"})
protected <T> T getTargetObject(Object proxy, Class<T> targetClass) throws Exception {
  if (aopUtils.isjdkDynamicProxy(proxy)) {
    return (T) ((Advised)proxy).getTargetSource().getTarget();
  } else {
    return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class
  }
}

public class AopTargetUtils {
    
    public static Object getTarget(Object proxy) throws Exception {
        if(!AopUtils.isAopProxy(proxy)) {
            return proxy;//不是代理对象
        }
        if(AopUtils.isJdkDynamicProxy(proxy)) {
            return getJdkDynamicProxyTargetObject(proxy);
        } else { //cglib
            return getCglibProxyTargetObject(proxy);
        }
    }
    private static Object getCglibProxyTargetObject(Object proxy) throws Exception {
        Field h = proxy.getClass().getDeclaredField("CGLIB$CALLBACK_0");
        h.setAccessible(true);
        Object dynamicAdvisedInterceptor = h.get(proxy);
        Field advised = dynamicAdvisedInterceptor.getClass().getDeclaredField("advised");
        advised.setAccessible(true);
        Object target = ((AdvisedSupport)advised.get(dynamicAdvisedInterceptor)).getTargetSource().getTarget();
        return target;
    }
    private static Object getJdkDynamicProxyTargetObject(Object proxy) throws Exception {
        Field h = proxy.getClass().getSuperclass().getDeclaredField("h");
        h.setAccessible(true);
        AopProxy aopProxy = (AopProxy) h.get(proxy);
        Field advised = aopProxy.getClass().getDeclaredField("advised");
        advised.setAccessible(true);
        Object target = ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget();
        return target;
    }
    @SuppressWarnings({"unchecked"})
    protected <T> T getTargetObject(Object proxy, Class<T> targetClass) throws Exception {
        if (AopUtils.isJdkDynamicProxy(proxy)) {
            return (T) ((Advised)proxy).getTargetSource().getTarget();
        } else {
            return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class
        }
    }
}

从Aop代理的对象中获取源对象



    @SuppressWarnings("unchecked")
    public static final <T> T getBeanFromProxy(T proxyObject) {
        Class<?> clazz = proxyObject.getClass();
        if(clazz.getName().startsWith("$Proxy")) {
            try {
                clazz = clazz.getSuperclass();
                Field hField = clazz.getDeclaredField("h");
                hField.setAccessible(true);
                Object hObject = hField.get(proxyObject);
 
                Class<?> dynamicProxyClass = hObject.getClass();
                Field advisedField = dynamicProxyClass.getDeclaredField("advised");
                advisedField.setAccessible(true);
                Object advisedObject = advisedField.get(hObject);
 
                Class<?> advisedSupportClass = advisedObject.getClass().getSuperclass().getSuperclass();
                Field targetField = advisedSupportClass.getDeclaredField("targetSource");
                targetField.setAccessible(true);
                Object targetObject = targetField.get(advisedObject);
 
                Class<?> targetSourceClass = targetObject.getClass();
                Field targetClassField = targetSourceClass.getDeclaredField("target");
                targetClassField.setAccessible(true);
                return (T) targetClassField.get(targetObject);
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 如何获得spring代理对象的原对象

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

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

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

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

下载Word文档
猜你喜欢
  • 如何获得spring代理对象的原对象
    获得spring代理对象的原对象 看代码吧: @SuppressWarnings({"unchecked"}) protected <T> T getTargetOb...
    99+
    2022-11-12
  • 怎么获得spring代理对象的原对象
    这篇文章主要介绍“怎么获得spring代理对象的原对象”,在日常操作中,相信很多人在怎么获得spring代理对象的原对象问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么获得spring代理对象的原对象”的疑...
    99+
    2023-06-20
  • Spring代理对象导致的获取不到原生对象注解的解决
    目录问题描述问题示例代码解决方案总结参考资料问题描述 我在接受 mq 消息的时候,需要做一个重试次数限制,如果超过 maxNum 就发邮件告警,不再重试。 所以我需要对 consum...
    99+
    2022-11-13
  • Spring代理对象导致的获取不到原生对象注解怎么解决
    本文小编为大家详细介绍“Spring代理对象导致的获取不到原生对象注解怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring代理对象导致的获取不到原生对象注解怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-06-29
  • Spring 代理 Bean 获取不到原始 Bean 对象注解解决方法
    目录一、问题描述1.问题示例代码二、解决方案一、问题描述 在接受 mq 消息的时候,需要做一个重试次数限制,如果超过 maxNum 就发邮件告警,不再重试。 所以...
    99+
    2022-11-13
  • jquery获得事件源对象的方法
    在JQuery中,可以很方便地获得事件源对象。在事件处理函数中,可以通过传递事件对象(event)来获得事件源对象。另外,JQuery还提供了一个函数来获取事件源对象,即event.target。event.target和this的区别在事...
    99+
    2023-05-18
  • VBS如何获得File对象并查看属性
    本篇内容主要讲解“VBS如何获得File对象并查看属性”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“VBS如何获得File对象并查看属性”吧!File 对象提供对文件的所有属性的访问。说明以下代...
    99+
    2023-06-08
  • VBS如何获得Folder对象并查看属性
    本篇内容介绍了“VBS如何获得Folder对象并查看属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Folder 对象提供对文件夹所有属性...
    99+
    2023-06-08
  • Spring AOP 创建代理对象详情
    目录1 前言2 创建代理对象3 AOPContext Aop 上下文4 AOP 分析汇总5 JDK 动态代理和 CGLIB 的区别与联系6 总结1 前言 在这篇文章中中已经讲述了 A...
    99+
    2022-11-13
  • Spring aop 如何通过获取代理对象实现事务切换
    Spring aop 获取代理对象实现事务切换 在项目中,涉及到同一个类中一个方法调用另外一个方法,并且两个方法的事务不相关, 这里面涉及到一个事务切换的问题,一般的方法没问题,根据...
    99+
    2022-11-12
  • js如何通过类名获得多个input对象
    今天小编给大家分享一下js如何通过类名获得多个input对象的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2022-10-19
  • JavaScript如何使用对象作为对象的原型
    这篇文章主要为大家展示了“JavaScript如何使用对象作为对象的原型”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何使用对象作为对象的...
    99+
    2022-10-19
  • Spring-AOP @AspectJ进阶之如何绑定代理对象
    概述 使用this()或target()可绑定被代理对象实例,在通过类实例名绑定对象时,还依然具有原来连接点匹配的功能,只不过类名是通过增强方法中同名入参的类型间接决定罢了。 这里我...
    99+
    2022-11-12
  • Spring aop怎么通过获取代理对象实现事务切换
    这篇文章主要介绍“Spring aop怎么通过获取代理对象实现事务切换”,在日常操作中,相信很多人在Spring aop怎么通过获取代理对象实现事务切换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Sprin...
    99+
    2023-06-20
  • Spring 如何创建 Bean 对象
    这篇文章主要讲解了“Spring 如何创建 Bean 对象”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring 如何创建 Bean 对象”吧!从整体上...
    99+
    2022-10-19
  • java如何获取session对象
    在Java中,可以通过以下方式获取session对象:1. 在JSP页面中:`HttpSession session = reque...
    99+
    2023-09-27
    java session
  • python中可迭代对象的原理是什么
    这篇文章给大家介绍python中可迭代对象的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillow;4.twis...
    99+
    2023-06-14
  • IE与Firefox在获得对象上的区别是什么
    今天就跟大家聊聊有关IE与Firefox在获得对象上的区别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。IE与Firefox获得对象上的区别1...
    99+
    2022-10-19
  • jQuery中如何将$引用的对象映射回原始的对象
    本文小编为大家详细介绍“jQuery中如何将$引用的对象映射回原始的对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“jQuery中如何将$引用的对象映射回原始的对象”文章能帮助大家解决疑惑,下面跟着小编...
    99+
    2022-10-19
  • java中的session对象如何获取
    目录获取session对象1.在springmvc中2.通过ServletActionContext获取在session存取值和对象的方法获取session对象 1.在springm...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作