import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Annotations are defined via the @interface annotation before the class name. * Via @Retention you define if the annotation should be retained at runtime or * not. The @Target annotation lets you define where this annotation can be * used, e.g. the class, fields, methods, etc. * * @author Watsh * */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface CanRun { }
public class AnnotatedMethodsClass { public void method1() { System.out.println("method1"); } @CanRun public void method2() { System.out.println("method2"); } @CanRun public void method3() { System.out.println("method3"); } public void method4() { System.out.println("method4"); } public void method5() { System.out.println("method5"); } }
import java.lang.reflect.Method; public class AnnotationAnalyzer { /** * The main method of this class analyzes the annotations and calls the * corresponding methods. * * @param args */ public static void main(String[] args) { AnnotatedMethodsClass clz = new AnnotatedMethodsClass(); Method[] methods = clz.getClass().getMethods(); for (Method m : methods) { CanRun annos = m.getAnnotation(CanRun.class); if (annos != null) { try { m.invoke(clz); } catch (Exception e) { e.printStackTrace(); } } } } }
No comments:
Post a Comment