
圖中的方法是mybatis的Mapper介面里的一個方法 有一個自定義的注解
是否可以在mybatis的攔截器里獲取到這個注解?

求大神解答
uj5u.com熱心網友回復:
AOP里面是 method.getAnnotation(.clazz)uj5u.com熱心網友回復:
我用的也是 aop 。在攔截器中沒試過。介面 s = method.getAnnotation(介面.class);
uj5u.com熱心網友回復:
測驗了一下,是可以的
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NoFilter {
String value() default "";
}
@Override
public Object intercept(Invocation invocation) throws Throwable {
// final Executor executor = (Executor) invocation.getTarget();
final Object[] args = invocation.getArgs();
final MappedStatement mappedStatement = (MappedStatement) args[0];
final Object parameter = args[1];
final RowBounds rowBounds = (RowBounds) args[2];
String namespace = mappedStatement.getId();
String className = namespace.substring(0,namespace.lastIndexOf("."));
String methedName= namespace.substring(namespace.lastIndexOf(".") + 1,namespace.length());
Method[] ms = Class.forName(className).getMethods();
for(Method m : ms){
if(m.getName().equals(methedName)){
Annotation annotation = m.getAnnotation(NoFilter.class);
System.out.println(annotation.toString());
};
}
}
uj5u.com熱心網友回復:
這是不存在的uj5u.com熱心網友回復:
你這個不能出現方法多載,出現多載后,你可能就找出目標了
uj5u.com熱心網友回復:
可以再改進下,引數都有,找到正確的method還是很簡單的
uj5u.com熱心網友回復:
測驗了一下,是可以的
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NoFilter {
String value() default "";
}
@Override
public Object intercept(Invocation invocation) throws Throwable {
// final Executor executor = (Executor) invocation.getTarget();
final Object[] args = invocation.getArgs();
final MappedStatement mappedStatement = (MappedStatement) args[0];
final Object parameter = args[1];
final RowBounds rowBounds = (RowBounds) args[2];
String namespace = mappedStatement.getId();
String className = namespace.substring(0,namespace.lastIndexOf("."));
String methedName= namespace.substring(namespace.lastIndexOf(".") + 1,namespace.length());
Method[] ms = Class.forName(className).getMethods();
for(Method m : ms){
if(m.getName().equals(methedName)){
Annotation annotation = m.getAnnotation(NoFilter.class);
System.out.println(annotation.toString());
};
}
}
你這個不能出現方法多載,出現多載后,你可能就找出目標了
可以再改進下,引數都有,找到正確的method還是很簡單的
其實是我自己的問題,mybatis是以namespace+id的形式來確定SQL的,因此mapper介面不能多載
uj5u.com熱心網友回復:
雖然還沒結帖。但是我想說。mybatis原始碼里獲取select之類的注解就是先獲取到方法然后再獲取注解的轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88896.html
標籤:Web 開發
上一篇:請問在JFrame框體下,對于很多個checkbox如何一次性回傳所有選中的標簽?
下一篇:求解
