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

    注解包含元注解和自定义注解

    元注解:

    元注解的作用就是负责注解其他注解。java提供了4个标准的meta-annotation类型,它们用来提供对其它annotation类型作说明:

    1  @Target

    2  @Retention

    3  @Documented

    4  @Inherited

    @Target:

    说明Annotation所修饰的对象范围:可用于packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量。

    作用:用于描述注解的使用范围

    取值(ElementType)有:

    1.CONSTRUCTOR:用于描述构造器

    2.FILED:用于描述域

    3.LOCL_VARIABLE:用于描述局部变量

    4.METHOD:用于描述方法

    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述参数
    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

    @Target(ElementType.TYPE)
    public @interface Table {
        /**
         * 数据表名称注解,默认值为类名称
         * @return
         */
        public String tableName() default "className";
    }
    
    @Target(ElementType.FIELD)
    public @interface NoDBColumn {
    
    }

    @注解Table可以用于注解类、接口或ENUM声明,而注解NoDBColumn仅可以注解类的成员变量

    @Retention:

    定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些缺被编译在class中,编译在class中的Annotation可能会被虚拟机忽略,而另一些在class被装载时被读取。使用这个元注解可以对Annotation“生命周期”限制。

    作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

    取值(RetentionPolicy)有:

    1  SOURCE:在源文件中有效(即源文件保留)

    2  CLASS:在class文件中有效(即CLASS保留)

    3  RUNTIME:在运行时有效(即运行时保留)

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Column {
        public String name() default "fieldName";
        public String setFuncName() default "setField";
        public String getFuncName() default "getField"; 
        public boolean defaultDBValue() default false;
    }板 

    Colum注解的RetentionPolicy是RUNTIME,这样处理器可以通过反射,获取到该注解的属性值,进行一些运算逻辑处理。

    @Documented:

    用于描述其它类型的注解应该被作为被标注的程序成员的公共API,可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Column {
        public String name() default "fieldName";
        public String setFuncName() default "setField";
        public String getFuncName() default "getField"; 
        public boolean defaultDBValue() default false;
    }

    @Inherited:

    是一个标记注解,阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

    /**
     * 
     * @author peida
     *
     */
    @Inherited
    public @interface Greeting {
        public enum FontColor{ BULE,RED,GREEN};
        String name();
        FontColor fontColor() default FontColor.GREEN;
    }

    自定义注解@interface

    格式:

    public @interface 注解名 {定义体}

  • 相关阅读:
    C++类的内存结构
    emplace与insert的区别(C++11)
    C/C++宏的奇技淫巧
    编译器对内存的分配
    利用C++实现模块隐藏(R3层断链)
    PCB标准规范
    RTC 总结
    0.96寸OLED显示屏 IIC接口(SSD1306)
    串行通信简介(SPI, IIC, UART)
    人生感悟
  • 原文地址:https://www.cnblogs.com/runwulingsheng/p/5512922.html
Copyright © 2011-2022 走看看