public @interface Test {
}
方法 | 说明 |
---|---|
getAnnotations( ) | 获取类、方法等上的所有注解内容 |
getAnnotation(XXX.class) | 获取到注解的内容 |
isAnnotationPresent(XXX.class) | 判断某个注解是否存在 |
//包含在DOC中
@Documented
//允许子类继承父类中的注解
@Inherited
//作用在方法上
@Target(ElementType.METHOD)
//保留到JVM运行上
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
//定义优先级,默认是0
int priority() default 0;
//是否要禁用,默认是false
boolean disabled() default false;
}
public class MainTest {
@Test(priority = 1)
public void test1(){
System.out.println("执行test1()....");
}
@Test(priority = 2)
public void test2(){
System.out.println("执行test2()....");
}
@Test(priority = 3)
public void test3(){
System.out.println("执行test3()....");
}
@Test(priority = 4)
public void test4(){
System.out.println("执行test4()....");
}
}
public class TestCore {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Class<MainTest> mainTestClass = MainTest.class;
//创建 MainTest 对象
MainTest mainTest = mainTestClass.newInstance();
//获取MainTest中所有的方法
Method[] declaredMethods = mainTestClass.getDeclaredMethods();
//定义Method集合
List<Method> methods = new ArrayList<>();
//过滤是否有禁用执行的方法
for (Method declaredMethod : declaredMethods) {
Test annotation = declaredMethod.getAnnotation(Test.class);
if(!annotation.disabled()){
methods.add(declaredMethod);
};
}
//对list中的数据进行排序,按照优先级执行
methods.sort(Comparator.comparingInt(obj->obj.getAnnotation(Test.class).priority()));
//遍历集合执行方法
methods.forEach(method -> {
try {
method.invoke(mainTest);
} catch (Exception e) {
System.out.println("执行方法失败");
}
});
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。