JAVA-Spring注解实现AOP权限拦截,如何取得方法上自定义Annotation的值呢?
比如说我在一个要拦截的方法上定义了一段自定义的Annotation@getView(Method="aa",Value="bb")publicStringgetName(...
比如说我在一个要拦截的方法上定义了一段自定义的Annotation
@getView(Method="aa",Value="bb")
public String getName(){
return "XXX";
}
现在我想在AOP的环绕通知时取得@getView(Method="aa",Value="bb") 的aa和bb应该怎么获取? 展开
@getView(Method="aa",Value="bb")
public String getName(){
return "XXX";
}
现在我想在AOP的环绕通知时取得@getView(Method="aa",Value="bb") 的aa和bb应该怎么获取? 展开
3个回答
展开全部
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@Retention(RetentionPolicy.RUNTIME)
@interface GetView {
String Method();
String Value();
}
public class Temp {
@GetView(Method = "aa", Value = "bb")
public void test() {
System.out.println("In test method.");
}
public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
Temp temp = new Temp();
Method method = temp.getClass().getMethod("test");
System.out.println(method.isAnnotationPresent(GetView.class));
method.invoke(temp);
GetView view = method.getAnnotation(GetView.class);
System.out.println(view.Method());
System.out.println(view.Value());
}
}
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@Retention(RetentionPolicy.RUNTIME)
@interface GetView {
String Method();
String Value();
}
public class Temp {
@GetView(Method = "aa", Value = "bb")
public void test() {
System.out.println("In test method.");
}
public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
Temp temp = new Temp();
Method method = temp.getClass().getMethod("test");
System.out.println(method.isAnnotationPresent(GetView.class));
method.invoke(temp);
GetView view = method.getAnnotation(GetView.class);
System.out.println(view.Method());
System.out.println(view.Value());
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该可以获取到 Method 对象,这个代表你拦截到的 方法 method.getAnnotation(getView.class); 你就可以获取到 对应的注解对象,然后通过注解对象,获取注解里面对应的属性值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主要问题在于不同的Annotation的拦截是不同的。 例如method级别的拦截。我们可以通过getMethodAnnotation(Class)的获取annotation。如果没有设置annotation,获取为空。
举个例子:
// 这里判断是否拦截方法
if(!(handler instanceof HandlerMethod)){
return true;
}
HandlerMethod method = (HandlerMethod)handler;
//这里获取了一个Menu的annotation。
Menu sm = method.getMethodAnnotation(Menu.class);
if(sm!=null){ //如果确实设置了Menu的annotation,就会进入此区域。
举个例子:
// 这里判断是否拦截方法
if(!(handler instanceof HandlerMethod)){
return true;
}
HandlerMethod method = (HandlerMethod)handler;
//这里获取了一个Menu的annotation。
Menu sm = method.getMethodAnnotation(Menu.class);
if(sm!=null){ //如果确实设置了Menu的annotation,就会进入此区域。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询