spring aop獲取代理目標(biāo)對象
大家一定在開發(fā)中遇見了這個問題征懈,getClass() 后獲取不到目標(biāo)對象魏宽,或者說宿接,拿到 class 后 getAnnotation() 獲取不到力麸,這些是 spring aop 將對象捏雌,改裝成了代理對象互婿。
上代碼,如:掃描MQ注解
正常:
xxx.getClass().getAnnotation(MQConsumer.class);
增加 @Transactional关顷,后 spring 事務(wù)管理器洽腺,將 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拉??????骇塘。