springboot項目類中方法加了@Transactional後,通過SpringUtil只能獲取到代理對象,無法獲取真實實例

項目中需要通過類上的自定義註解獲取所有有些註解的對象

SpringUtil.getApplicationContext().getBeansWithAnnotation(MyAnnotation.class);

然而在這些對象的方法中如果加入了@Transactional這類註解,這些對象就會變爲代理對象,在代理對象中無法獲取到註解裏面定義的值。

obj.getClass().getAnnotation(MyAnnotation.class);

此時返回爲空。

解決方法:

通過下面spring自帶的方法判斷該類是否是代理類

AopUtils.isAopProxy(obj);

再通過

AnnotationUtils.findAnnotation(obj.getClass(), MyAnnotation.class);

獲取真實實例註解裏面真正的值。

 

通過反射也可以實現此效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章