使用spring用得最爽的莫过于注解了,但是怎么获取注解的参数值可能我们并不是很关心,再读源码前还是需要知道注解的参数是怎么获取的.请自行了解五个元注解.
测试代码如下:
先建立一个注解类:
package com.xq.anno;
import org.springframework.stereotype.Indexed;
import java.lang.annotation.*;
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface XqAnno {
String value() default "";
String bb() default "";
}
再建立一个类,写上注解:
package com.xq.anno;
@XqAnno(value = "aaa")
public class Annotest {
@XqAnno(value = "method111",bb = "mbb")
public void test(){
System.out.println("hahaha");
}
}
另起一个类去解析到注解值:
package com.xq.anno;
import com.sun.tools.javac.code.Attribute;
import java.lang.reflect.Method;
public class AcquireAnno {
public static void main(String[] args) throws ClassNotFoundException {
//首先通过反射获取类
Class<?> c = Class.forName(Annotest.class.getName());
//判断类上是否包含相应注解
boolean b = c.isAnnotationPresent(XqAnno.class);
if (b) {
//获取类上的注解
XqAnno annotation = c.getAnnotation(XqAnno.class);
System.out.println("class is :"+annotation.value()+",,"+annotation.bb());
}
//拿到类上所有方法
Method[] methods = c.getDeclaredMethods();
for (Method method : methods) {
//判断方法上是否包含相应注解
boolean ok = method.isAnnotationPresent(XqAnno.class);
if (ok) {
XqAnno methodAnnotation = method.getAnnotation(XqAnno.class);
System.out.println("method is :"+methodAnnotation.value()+",,"+methodAnnotation.bb());
}
}
}
}
结果:
至于拿到了注解值,应该干什么事就全凭能力了.