1,自定义个注解MyAnnotation
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@Documented
public @interface MyAnnotation {
int id();
String name() default "zhoubiao";
int age();
String gender();
}
2,定义使用注解的类
import com.zhou.annotation.MyAnnotation;
import org.springframework.stereotype.Service;
@Service
public class AnnotationService {
// 使用注解
@MyAnnotation(id = 1, name = "雪琳", age = 25, gender = "男")
public void zhou(int id, String name, int age, String gender) {
System.out.println("id: "+ id +"\n" +
"name: " + name + "\n"+
"age: " + age + "\n"+
"gender: " + gender + "\n");
}
}
3,注解解析类
import com.zhou.annotation.MyAnnotation;
import com.zhou.service.AnnotationService;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class ExplainMyAnnotation {
public static void main(String[] args) throws Exception {
// 获取使用注解的类
Class<AnnotationService> aClass = AnnotationService.class;
// 获取构造器
Constructor<AnnotationService> constructor = aClass.getConstructor();
// 获取实例
AnnotationService annotationService = constructor.newInstance();
// 获取方法
Method[] methods = aClass.getDeclaredMethods();
for (Method method : methods) {
// 判断是否还有MyAnnotation注解
if (method.isAnnotationPresent(MyAnnotation.class)) {
// 获取MyAnnotation注解
MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
// 获取属性
int id = annotation.id();
String name = annotation.name();
int age = annotation.age();
String gender = annotation.gender();
method.invoke(annotationService, id, name, age, gender);
}
}
}
}