class<?> clazz参数_Spring AOP代理类获取泛型参数问题

本文探讨了在Spring Boot 2.x环境中,使用AOP时如何正确判断CGLIB代理对象的泛型类型与原接口不一致的问题。作者提供了修改代码以适应代理对象并解决判断错误的方法,同时提到了针对不同代理方式获取被代理对象的注意事项。
摘要由CSDN通过智能技术生成

环境描述:

spring boot 2.x、jdk1.8

问题描述:

在使用AOP时,当获取到CGLIB代理对象类Class之后,在判断代理类Class是否包含泛型时与被代理类返回结果不一致,

在项目中M990001_Service所实现接口包含泛型

4f74db5fb432019e6b39a013b1a2d14b.png

对于目标类的泛型操作具体代码如下

824e96cc9f9dc0b56e32c6b79e2c9e95.png

当未使用AOP操作M990001_Service时,此时传入的是目标类对象,并且代码行判断是通过的

if 

bfa24d9b328e4a322053b544e0f57674.png

此行代码是判断目标类的四线接口是否包含泛型属性,而事实上M990001_Service所实现的

TransService<T_M990001, R_M990001>接口包含了泛型参数

但是,

当使用AOP来处理M990001_Service的时候,此时传入到该部分代码的并不是目标类,而是目标类的代理类

0a0bf8b95c9e0bc6ceabe31be5a35ec6.png

通过DEBUG可以看出,出入的目标类是有CGLIB实现的代理类,而对于是否包含泛型的判断也返回false,

那这个问题该怎么解决呢?

首先判断传入的目标类是否为代理类,如果是代理类,则根据代理类获取被代理了

解决方案:

按照刚刚说的思路,修改原代码实现就行了,当然,要注意不同的代理方式,获取被代理对象是不同的,以下附上代码

import 

知乎编辑器太垃圾了,令附截图

d8cb8d9d68065f8a1477553e4b6c0d32.png

33b024189b9f54a08c768f5cae041649.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值