項目中需要通過類上的自定義註解獲取所有有些註解的對象
SpringUtil.getApplicationContext().getBeansWithAnnotation(MyAnnotation.class);
然而在這些對象的方法中如果加入了@Transactional這類註解,這些對象就會變爲代理對象,在代理對象中無法獲取到註解裏面定義的值。
obj.getClass().getAnnotation(MyAnnotation.class);
此時返回爲空。
解決方法:
通過下面spring自帶的方法判斷該類是否是代理類
AopUtils.isAopProxy(obj);
再通過
AnnotationUtils.findAnnotation(obj.getClass(), MyAnnotation.class);
獲取真實實例註解裏面真正的值。
通過反射也可以實現此效果。