spring aop获取代理目标对象
大家一定在开发中遇见了这个问题,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拉🌹🌹🌹。
网友评论