spring aop獲取代理目標(biāo)對(duì)象
大家一定在開發(fā)中遇見了這個(gè)問(wèn)題,getClass() 后獲取不到目標(biāo)對(duì)象,或者說(shuō),拿到 class 后 getAnnotation() 獲取不到,這些是 spring aop 將對(duì)象,改裝成了代理對(duì)象。
上代碼,如:掃描MQ注解
正常:
xxx.getClass().getAnnotation(MQConsumer.class);
增加 @Transactional,后 spring 事務(wù)管理器,將 Method 增改,包裝了一個(gè)代理對(duì)象。
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 代理對(duì)象
- 第二步:獲取代理對(duì)象就ok拉??????。