aop切面獲取繼承tkmapper子類上面的類註解

這是我寫的第一篇文章,自己還是個小白,有錯誤的地方可以指出來喲
1.pointcut表達式:execution 用於匹配連接點;annotation 只能匹配到方法上的註解,類上的註解是匹配不到的。

@annotation(com.novacloud.common.annotation.MongoJournal)
execution(* com.novacloud.common.dao..*.*(..))

2.Around是最先執行的,其次是Before,然後根據

Object result = joinPoint.proceed();

執行方法,後面就是After等了。
3.獲取切面執行方法

MethodSignature signature = (MethodSignature) joinPoint.getSignature();  
Method method = signature.getMethod();

4.上面的大家應該都接觸過或者瞭解,下面這個是我弄了好久的坑,也是主要內容(我在XXmapper接口上用了註解,但是XXmapper繼承了tkmapper,我要做的就是獲取XXmapper上的註解),因爲繼承、代理原因

joinPoint.getTarget()

獲取的都是最底層的BaseMapper,無法獲取類的信息,但通過強轉後的mapper是XXmapper的代理,可以直接使用,通過方法獲取信息,如下

Mapper mapper = (Mapper) joinPoint.getTarget();
//獲取參數
Object object = joinPoint.getArgs()[0];
//可以直接獲取XXmapper想要獲取的信息
Object oldObject = mapper.selectByPrimaryKey(object);

所以,獲取子類的話是不能通過target入手的,同樣通過signature.getMethod()也是不可以的(method同樣是底層類的方法,還是獲取不到子類的信息),只能通過簽名獲取

//獲取當前類名
String className = joinPoint.getSignature().getDeclaringType().getSimpleName();
//獲取當前類上的註解
MapperType mapperType = (MapperType) joinPoint.getSignature().getDeclaringType().getAnnotation(MapperType.class);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章