学习总结(annotation)

自定义MyAnnotationTest

package com.zhanghaobo.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * @author
 *自定义注解(只能用于方法上)
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotationTest {
    
    MyName name();
}
enum MyName{
    HELLO,WORLD,WELCOM,HELLOWORLD
}

测试类 Test

 1 package com.zhanghaobo.annotation;
 2 
 3 public class Test {
 4     @MyAnnotationTest(name=MyName.HELLOWORLD)
 5     public void doSomething(){
 6         System.out.println("注解修饰调用");
 7     }
 8     public void doOtherthing(){
 9         System.out.println("没有被修饰的方法");
10     }
11     @MyAnnotationTest(name=MyName.WELCOM)
12     public void doSome(String... name){
13         System.out.println("带参数的修饰调用"+name);
14     }
15 }


调用类
 1 package com.zhanghaobo.annotation;
 2 
 3 import java.lang.reflect.Method;
 4 
 5 /**
 6  * @author Administrator
 7  *通过反射调用Test中的方法,并获取注解方法的类型
 8  */
 9 public class MyRefelctionTest {
10     public static void main(String[] args) throws Exception {
11         Class<?> clazz=null;
12         try{
13         clazz=Class.forName("com.zhanghaobo.annotation.Test");
14         }catch(Exception e){
15             e.printStackTrace();
16         }
17         Method[] method=clazz.getMethods();
18         for(Method me:method){
19             //如果是带自定义注解的执行
20             if(me.isAnnotationPresent(MyAnnotationTest.class)){
21                 System.out.println(me.getAnnotation(MyAnnotationTest.class)); 
22                 //如果是无返回的,并且不带可变参数的执行
23                 if(me.getReturnType()==Void.TYPE&&!me.isVarArgs()){
24                     me.invoke(new Test());
25                 }
26             }
27         }
28     }
29     
30 }

执行结果:

@com.zhanghaobo.annotation.MyAnnotationTest(name=HELLOWORLD)
注解修饰调用
@com.zhanghaobo.annotation.MyAnnotationTest(name=WELCOM)

 
原文地址:https://www.cnblogs.com/oldcownotGiveup/p/5366209.html