spring aop获取代理目标对象

spring aop获取代理目标对象

转载: https://coget.cn/archives/spring%20aop%E8%8E%B7%E5%8F%96%E4%BB%A3%E7%90%86%E7%9B%AE%E6%A0%87%E5%AF%B9%E8%B1%A1

大家一定在开发中遇见了这个问题,getClass() 后获取不到目标对象,或者说,拿到 class 后 getAnnotation() 获取不到,这些是 spring aop 将对象,改装成了代理对象。

上代码,如:扫描MQ注解

正常:

xxx.getClass().getAnnotation(MQConsumer.class);

增加 @Transactional,后 spring 事务管理器,将 Method 增改,包装了一个代理对象。

 consumers.entrySet().forEach(entry -> {
    MQConsumer consumer;
    if (AopUtils.isAopProxy(entry.getValue())) {
        consumer = AopProxyUtils.getSingletonTarget(entry.getValue()).getClass().getAnnotation(MQConsumer.class);
    } else {
        consumer = entry.getValue().getClass().getAnnotation(MQConsumer.class);
    }
});

ps:

  • 第一步:检查是否是 aop 代理对象
  • 第二步:获取代理对象就ok拉🌹🌹🌹。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容