自定义注解--Annotation
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相关推荐
- spring中自定义注解(annotation)与AOP中获取注解___使用aspectj的@Around注解实现用户操作和操作结果日志
spring中自定义注解(annotation)与AOP中获取注解 一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. packag ...
- 一小时搞明白自定义注解(Annotation)
原文链接:http://blog.csdn.net/u013045971/article/details/53433874 什么是注解 Annotation(注解)就是Java提供了一种元程序中的元素 ...
- Java自定义注解Annotation的实现原理
文章目录 1.什么是注解? 2.注解的用处: 3.注解的原理: 4.元注解: 5.常见标准的Annotation: 6.自定义注解: 7.自定义注解实例: 1.什么是注解? 对于很多初次接触的开发 ...
- Android 自定义注解(Annotation)
现在市面上很多框架都有使用到注解,比如butterknife库.EventBus库.Retrofit库等等.也是一直好奇他们都是怎么做到的,注解的工作原理是啥.咱们能不能自己去实现一个简单的注解呢.注 ...
- java自定义注解annotation记录操作日志
说到注解我们平常用的可以说非常多啦,说几个常用的的注解 @RestController @Service @Autowired 这些都是我们平常使用spring框架最常见的注解了,我们只知道它们非常好 ...
- SpringBoot 2.x 自定义注解annotation实现MicroMeter埋点
介绍 Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可.Micrometer 会负责完成与 ...
- SAP Fiori Elements里的SAP自定义注解annotation sap-text
- Spring AOP自定义注解并获取注解的参数
环境 springboot:1.5 Intellij IDEA:2021.1 序言 最近有个需求,要做方法层面的权限控制.以前在公司使用的是spring security,然后使用注解 如下: @Pr ...
- 深入理解Java注解Annotation及自定义注解
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法. 元注解: 元注解的作用就是负责注解其他注解.Java5. ...
最新文章
- ajax返回html乱码问题,ajax返回的html代码问题
- 浅谈 UNIX、Linux、ios、android 他们之间的关系
- python创建新进程_Python os.fork()方法:创建新进程
- linux proc大量文件夹,简析Linux中 /proc/[pid] 目录的各文件
- Sonar+Hudson+Maven构建系列之三:安装Hudson
- Node rabbitmq 入门就够了
- 计算机网络工程师中级软考试题及答案,软考中级历年真题+章节题库
- 装配标准工时如何计算?详解:装配的标准工时计算方法
- sht11的linux程序,SHT11温湿度传感器的proteus仿真与程序源码
- #芯片# R8025(RX-8025T)
- 视频光端机怎么连接 视频光端机接法图解
- OSChina 周三乱弹 —— 余生指教NMB
- 【CV】Swin Transformer:使用 Shifted Windows 的分层视觉 Transformer
- 网站安全不可忽视--一个收费网站的破解过程
- 查看当前Ubuntu系统的版本
- [Linux] USB-Storage驱动 源码阅读笔记(一)
- 智能温度、电压监测系统
- 通俗浅显的理解promise中的then
- android 展示虚拟键盘,在android TabLayout中显示虚拟键盘
- MySQL如何查看当前表结构