美文网首页
java注解

java注解

作者: camlboy | 来源:发表于2017-05-10 18:06 被阅读25次

    直接上代码:

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)//标识在代码运行期间进行应用
    public @interface MyAnnotation {
        String value();//保存变量名,参数名为value
    }
    

    定义一个自己的类使用自定义注解:

    public class MyClass{
            
            @MyAnnotation("username")
            private String username;
        }
    

    运行测试:

    public class Mian {
        public static void main(String args[]) {
            System.out.println("Hello World!");
            MyClass myClass = new MyClass();
            Field[] fields = myClass.getClass().getDeclaredFields();
            for (Field field : fields){
                if (field.isAnnotationPresent(MyAnnotation.class)) {
                    MyAnnotation alias = field.getAnnotation(MyAnnotation.class);
                    System.out.println(alias.value());
                }
            }
        }
    
        public static class MyClass{
    
            @MyAnnotation("username")
            private String username;
        }
    }
    

    输出如下:

    Hello World!
    username
    
    

    一个简单的注解完成了,接下来看看方法的注解应用:

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @interface MethodAnnotation {
        String value();
        int id();
    }
    
    public static class MyClass{
    
            @MyAnnotation("username")
            private String username;
    
            @MethodAnnotation(value = "i am method annotation",id = 2)
            private void myMethod(){
                System.out.println("I am method body!!!");
            }
        }
    
    

    测试如下:

    
            Method[] methods = myClass.getClass().getDeclaredMethods();
            for (Method method : methods){
                if(method.isAnnotationPresent(MethodAnnotation.class)){
                    MethodAnnotation methodAnnotation = method.getAnnotation(MethodAnnotation.class);
                    System.out.println(methodAnnotation.value() + " id is " + methodAnnotation.id());
                    try {
                        if (Modifier.isStatic(method.getModifiers())) {
                            method.invoke(null); // static method
                        } else if (Modifier.isPrivate(method.getModifiers())) {
                            method.setAccessible(true);  // private method
                            method.invoke(myClass);
                        } else {
                            method.invoke(myClass);  // public method
                        }
                        method.invoke(myClass.getClass());
                    }catch (Exception e){
                        e.printStackTrace();
                    }
    
                }
            }
    

    输出结果如下:

    i am method annotation id is 2
    I am method body!!!
    
    

    注解在java中的应用特别广泛,Spring,Xutils等等框架,器原理如上,java官话把注解说成元数据,一种代码级别的说明。其实说白了就是代码的标记,我把这个变量或者这个方法通过注解进行标记区分,从而在代码运行期间通过反射去判断,如果有标记就做我们的自定义操作

    相关文章

      网友评论

          本文标题:java注解

          本文链接:https://www.haomeiwen.com/subject/camgtxtx.html