Annotation

  概念:注解

原理

  是一种接口,通过反射机制中的相关API来访问annotation信息

常见的标准Annotation

@Override   方法重写

@Deprecated  表示过期的东西警告

@SuppressWarnnings    取消显示指定的警告

自定义Annotation

访问修饰符  @interface Annotation名称{返回类型 method() [default 默认值];.......}

package com.tanlei.URL;public class MyAnnotation {@MyAnnotation1public MyAnnotation() {}@MyAnnotation2(color=Color.RED)//@MyAnnotation2(value= {"zhangsa","lisi"})// @MyAnnotation2(value = "tanlei" ,age=18)public static void main(String[] args) {@MyAnnotation1  int num=10;}
}
enum Color{RED,BLUE,YELLOW;
}//标记注解
@interface MyAnnotation1{}//标记注解
@interface MyAnnotation2{//String value() default "李四";//int age();//String [] value();
    Color color();
}

Meta Annotation

元注解:

  元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
    1.@Target,
    2.@Retention,
    3.@Documented,
    4.@Inherited
  这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。

@Target:

作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

  取值(ElementType)有:

    1.CONSTRUCTOR:用于描述构造器
    2.FIELD:用于描述域
    3.LOCAL_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 {}

View Code

@Retention:

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

  取值(RetentionPoicy)有:

    1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在运行时有效(即运行时保留)

  Retention meta-annotation类型有唯一的value作为成员,它的取值来自java.lang.annotation.RetentionPolicy的枚举类型值。具体实例如下:

@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;
}

View Code

@Documented:

  @Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共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;
}

View Code

@Inherited:

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

  注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。

  当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。

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

View Code

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

自定义注解:

  使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

  定义注解格式:
  public @interface 注解名 {定义体}

  注解参数的可支持数据类型:

    1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上所有类型的数组

  Annotation类型里面的参数该怎么设定: 
  第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型;   
  第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String;  
  第三,如果只有一个参数成员,最好把参数名称设为"value",后加小括号.例:下面的例子FruitName注解就只有一个参数成员。

  简单的自定义注解和使用注解实例:

package com.tanlei.dao;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/** 水果名称注解*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {String value() default "";
}

package com.tanlei.dao;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/** 水果颜色注解*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {/*** 颜色枚举*/public enum Color{BULE,RED,GREEN};/** 颜色属性*/Color fruitColor() default Color.GREEN;
}

package com.tanlei.dao;import com.tanlei.dao.FruitColor.Color;public class App {@FruitName("Apple")private String  appleName;@FruitColor(fruitColor=Color.RED)private String appleColor;public String getAppleName() {return appleName;}public void setAppleName(String appleName) {this.appleName = appleName;}public String getAppleColor() {return appleColor;}public void setAppleColor(String appleColor) {this.appleColor = appleColor;}public void displayName() {System.out.println("水果的名字是:水果");}}

转载于:https://www.cnblogs.com/tanlei-sxs/p/10041678.html

自定义注解--Annotation相关推荐

  1. spring中自定义注解(annotation)与AOP中获取注解___使用aspectj的@Around注解实现用户操作和操作结果日志

    spring中自定义注解(annotation)与AOP中获取注解 一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. packag ...

  2. 一小时搞明白自定义注解(Annotation)

    原文链接:http://blog.csdn.net/u013045971/article/details/53433874 什么是注解 Annotation(注解)就是Java提供了一种元程序中的元素 ...

  3. Java自定义注解Annotation的实现原理

    文章目录 1.什么是注解? 2.注解的用处: 3.注解的原理: 4.元注解: 5.常见标准的Annotation: 6.自定义注解: 7.自定义注解实例: 1.什么是注解?   对于很多初次接触的开发 ...

  4. Android 自定义注解(Annotation)

    现在市面上很多框架都有使用到注解,比如butterknife库.EventBus库.Retrofit库等等.也是一直好奇他们都是怎么做到的,注解的工作原理是啥.咱们能不能自己去实现一个简单的注解呢.注 ...

  5. java自定义注解annotation记录操作日志

    说到注解我们平常用的可以说非常多啦,说几个常用的的注解 @RestController @Service @Autowired 这些都是我们平常使用spring框架最常见的注解了,我们只知道它们非常好 ...

  6. SpringBoot 2.x 自定义注解annotation实现MicroMeter埋点

    介绍 Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可.Micrometer 会负责完成与 ...

  7. SAP Fiori Elements里的SAP自定义注解annotation sap-text

  8. Spring AOP自定义注解并获取注解的参数

    环境 springboot:1.5 Intellij IDEA:2021.1 序言 最近有个需求,要做方法层面的权限控制.以前在公司使用的是spring security,然后使用注解 如下: @Pr ...

  9. 深入理解Java注解Annotation及自定义注解

    要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...

最新文章

  1. ajax返回html乱码问题,ajax返回的html代码问题
  2. 浅谈 UNIX、Linux、ios、android 他们之间的关系
  3. python创建新进程_Python os.fork()方法:创建新进程
  4. linux proc大量文件夹,简析Linux中 /proc/[pid] 目录的各文件
  5. Sonar+Hudson+Maven构建系列之三:安装Hudson
  6. Node rabbitmq 入门就够了
  7. 计算机网络工程师中级软考试题及答案,软考中级历年真题+章节题库
  8. 装配标准工时如何计算?详解:装配的标准工时计算方法
  9. sht11的linux程序,SHT11温湿度传感器的proteus仿真与程序源码
  10. #芯片# R8025(RX-8025T)
  11. 视频光端机怎么连接 视频光端机接法图解
  12. OSChina 周三乱弹 —— 余生指教NMB
  13. 【CV】Swin Transformer:使用 Shifted Windows 的分层视觉 Transformer
  14. 网站安全不可忽视--一个收费网站的破解过程
  15. 查看当前Ubuntu系统的版本
  16. [Linux] USB-Storage驱动 源码阅读笔记(一)
  17. 智能温度、电压监测系统
  18. 通俗浅显的理解promise中的then
  19. android 展示虚拟键盘,在android TabLayout中显示虚拟键盘
  20. MySQL如何查看当前表结构

热门文章

  1. 直播短视频手机APP应用下载页面静态html网页模板
  2. 商业初创公司网站单页模板
  3. PHP双码率视频云转码服务系统源码 m3u8切片秒切
  4. 高仿蓝奏云单页下载页面源码
  5. readonly和const比较
  6. Nginx设置禁止通过IP访问服务器
  7. 使用 JS 文件调用 Google AdSense 广告 cnblogs
  8. CentOS安装图文教程
  9. Linux/Ubuntu: 使用 trash-cli 防止 rm 命令误删除重要文件
  10. Nestable 可移动拖拽的树型结构的使用(jQuery)