- 创建自定义注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Book {
int index() default 0;
}
- 创建一个类来使用自定义注解
public class MybookTest {
@Book(index = 3)
public void show1(){
System.out.println("正在执行show1()");
}
@Book(index = 1)
public void show2(){
System.out.println("正在执行show2()");
}
@Book(index = 0)
public void show3(){
System.out.println("正在执行show3()");
}
@Book(index = 2)
public void show4(){
System.out.println("正在执行show4()");
}
}
- 通过反射解析自定义类并运行方法
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Comparator;
public class DemoAnontation {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class<?> aClass = Class.forName("com.itheima.annotation.MybookTest");
Object obj = aClass.getConstructor().newInstance();
Method[] methods = aClass.getMethods();
Arrays.sort(methods, new Comparator<Method>() {
public int compare(Method o1, Method o2) {
if(o1.isAnnotationPresent(Book.class) &&
o2.isAnnotationPresent(Book.class)){
Book t1 = o1.getAnnotation(Book.class);
Book t2 = o2.getAnnotation(Book.class);
int index1 = t1.index();
int index2 = t2.index();
return index1 - index2;
}
return 0;
}
});
for (Method method : methods) {
if (method.isAnnotationPresent(Book.class)){
method.invoke(obj);
}
}
}
}
- 执行结果如下
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0bd80a3220ba5ef504b7fb589f7aeb7f.png)