环境描述:
spring boot 2.x、jdk1.8
问题描述:
在使用AOP时,当获取到CGLIB代理对象类Class之后,在判断代理类Class是否包含泛型时与被代理类返回结果不一致,
在项目中M990001_Service所实现接口包含泛型
![4f74db5fb432019e6b39a013b1a2d14b.png](https://i-blog.csdnimg.cn/blog_migrate/bee7c8f375348fd62f6a9763e228cc8e.jpeg)
对于目标类的泛型操作具体代码如下
![824e96cc9f9dc0b56e32c6b79e2c9e95.png](https://i-blog.csdnimg.cn/blog_migrate/8c489cb65c9b653b0605deeeafb03917.jpeg)
当未使用AOP操作M990001_Service时,此时传入的是目标类对象,并且代码行判断是通过的
if
![bfa24d9b328e4a322053b544e0f57674.png](https://i-blog.csdnimg.cn/blog_migrate/9e6c4d2b1531bf71eddf96efc25e58fe.jpeg)
此行代码是判断目标类的四线接口是否包含泛型属性,而事实上M990001_Service所实现的
TransService<T_M990001, R_M990001>接口包含了泛型参数
但是,
当使用AOP来处理M990001_Service的时候,此时传入到该部分代码的并不是目标类,而是目标类的代理类
![0a0bf8b95c9e0bc6ceabe31be5a35ec6.png](https://i-blog.csdnimg.cn/blog_migrate/a5da8b5f513ccd26289c020352246682.jpeg)
通过DEBUG可以看出,出入的目标类是有CGLIB实现的代理类,而对于是否包含泛型的判断也返回false,
那这个问题该怎么解决呢?
首先判断传入的目标类是否为代理类,如果是代理类,则根据代理类获取被代理了
解决方案:
按照刚刚说的思路,修改原代码实现就行了,当然,要注意不同的代理方式,获取被代理对象是不同的,以下附上代码
import
知乎编辑器太垃圾了,令附截图
![d8cb8d9d68065f8a1477553e4b6c0d32.png](https://i-blog.csdnimg.cn/blog_migrate/94a6d0dd43a9aad9199788f706b86cfd.jpeg)
![33b024189b9f54a08c768f5cae041649.png](https://i-blog.csdnimg.cn/blog_migrate/f6777e717dba41be2f4ae04fc62f68be.jpeg)