zoukankan      html  css  js  c++  java
  • Java注解

    注解是代码的附属信息,它遵循一个基本原则:注解不能直接干扰程序代码的运行,无论增加或删除注解,代码都能正常运行。java语言解释器会忽略这些注解,而由第三方工具 负责对注解进行处理。第三方工具可以利用代码中的注解间接控制程序代码的运行,它们通过java反射机制读取注解的信息,并根据这些信息更改目标程序的逻辑,而这就是SpringAOP对@AspectJ提供支持所采取的方法。

    定义注解:

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface NeedTest {
        boolean value() default true;
        String description()default "LOW";
    }

    注解的限制:

      1.成员以无入参无抛出异常的方式声明。

      2.可以通过default为成员指定一个默认值。

      3.成员类型是受限的,合法的类型包括原始类型和封装类型。

    @Retention表示NeedTest这个注解的保留期限。

      Retention.SOURCE  注解将被编译器丢弃,只保存在源码中。

      Retention.CLASS     注解在class文件中可用,但类加载器加载字节码文件时不会将注解加载到JVM中,也即运行期不能获取注解信息。

      Retention.RUNTIME  将在运行期间保留注解,因此可以通过反射机制读取注解的信息。

    @Target注解表示这个注解的应用目标

      CONSTRUCTOR:构造器的声明

      FIELD:域声明(包括enum实例)

      LOCAL_VARIABLE:局部变量声明

      METHOD:方法声明

      PACKAGE:包声明

      PARAMETER:参数声明

      TYPE:类、接口(包括注解类型)或enum声明

    使用注解:

    public class ForumService {
        @NeedTest(value = true)
        public void deleteForumById(int fornmId){
            System.out.println("delte forum "+fornmId);
        }
    }

    获取注解:

    Class classz = ForumService.class;
            Method[]methods = classz.getDeclaredMethods();
            for (Method method:methods) {
                NeedTest needTest = method.getAnnotation(NeedTest.class);
                if(needTest!=null)
                {
                    if(needTest.value() == true)
                    {
                        System.out.println(method.getName()+"() need Test");
                    }
                    else {
                        System.out.println(method.getName()+"() no need Test");
                    }
                }
            }
  • 相关阅读:
    泛型-----------C#
    wpf风格的数据绑定------WPF
    wpf引用外部样式及外部样式的复杂写法--------WPF
    线程的最简易写法-------------android
    Fragment的用法(类似于.net的用户控件,重用性好)。。。。---------------android
    写一个事件(不仅仅是为控件添加事件)------------C#
    页面跳转(带返回参数的)---------android
    构造函数(构造器)的正确重载方式------类
    利用 CSS3 判断手机是横屏还是竖屏
    AngularJS Or jQuery 省份城市二级联动下拉功能
  • 原文地址:https://www.cnblogs.com/alway-july/p/8854927.html
Copyright © 2011-2022 走看看