java EE开发之Servlet第十四课:自定义注解Annotation-IT知识库

java EE开发之Servlet第十四课:自定义注解Annotation-IT知识库

咨询热线

0731-82115773

精选文章 > IT知识库 > java EE开发之Servlet第十四课:自定义注解Annotation

java EE开发之Servlet第十四课:自定义注解Annotation

时间:2019-05-13  发布:新梦想培训  来源:新梦想IT职业教育

1. Annotation概述

Annotation是JDK 5.0以后提供对元数据的支持,可以在编译、加载和运行时被读取,并执行相应的处理。所谓Annotation就是提供了一种为程序元素设置元数据的方法,可用于修饰包、类、构造器、方法、成员变量、参数和局部变量的声明,这些信息被存储在Annotation的“name=value”对中。

Annotation能被用来为程序元素(类、方法、成员变量等)设置元数据,比如一段代码的作者或者告诉编译器禁止一些特殊的错误,不会影响代码的执行。


2. 基本Annotation

在Java中提供了3个基本Annotation的用法,使用Annotation时要在其前面增加@符号,并把该Annotation当作一个修饰符使用,用于修饰它支持的程序元素。这3个基本Annotation都定义在java.lang包下,可以通过查看API文档来了解。

**第一种:@Override:**限定重写父类方法。

@Override就是用来指定方法覆载的,它可以强制一个子类必须覆盖父类的方法。

如果Apple类的info()方法名写成了inf()的话,编译器会报错。值得注意的是,@Override只能修饰方法,不能修饰其他程序元素。

**第二种:@Deprecated:**标示已过时。

@Deprecated用于表示某个程序元素已过时,当其他程序使用已过时的类、方法时,编译器将会给出警告。

**第三种:@SuppressWarnings:**抑制编译器警告。

@SuppressWarnings表示被该Annotation修饰的代码取消显示指定的编译器警告。


3. 自定义Annotation

自定义一个Annotation类型使用@interface关键字,定义一个新的Annotation类型与定义一个接口非常像(只是多了一个@符号)。



新梦想干货


在自定义一个Annotation类型通常可以用于修饰程序中的类、方法、变量、接口等。一般情况下,使用Annotation会在代码之前使用。



新梦想干货


4. Annotation属性

自定义Annotation不仅可以是这种简单形式,还可以包含成员变量。自定义的Annotation的成员变量以无形参的方法形式来声明,其方法名和返回值定义了该成员变量的名字和类型。


新梦想干货


使用带有属性的自定义Annotation时,必须使用其属性指定值,否则会报错。


新梦想干货


自定义Annotation不仅可以设置属性,还可以为属性设置默认值,使用default关键字。


新梦想干货


如果为自定义Annotation的属性设置了默认值,则在使用时可以不为该属性指定值(使用默认值)。也可以在使用该Annotation时为其属性指定值,则默认值不会起作用。

自定义Annotation中具有名为value的属性,在使用该Annotation时如果只使用value属性的话,可以不写属性名直接指定值。


新梦想干货


Annotation的属性类型只能是基本类型、String、Enum、Class及上述类型的一维数组类型。


5 .@Target注解

@Target修饰自定义Annotation,指定该自定义Annotation可以用于修饰哪些程序单元,例如方法、成员变量等。@Target注解包含一个ElementType类型的value属性,该属性值只能是如下几个:


新梦想干货


以下是@Target注解的源码和ElementType的源码:


新梦想干货


6 .@Retention注解

@Retention修饰自定义Annotation,指定自定义Annotation的生命周期。@Retention包含一个RetentionPolicy类型的value属性,该属性值只能是如下几个:

**RetentionPolicy.CLASS:**编译器将把Annotation记录在class文件中。当运行Java程序时,JVM不可获取Annotation信息。这时默值。

**RetentionPolicy.RUNTIME:**编译器将把Annotation记录在class文件中。> 当运行Java程序时,JVM也可以获取Annotation信息,程序可以通过反射获取该> Annotation信息。

RetentionPolicy.SOURCE:Annotation只保留在源代码中,编译器直接丢弃这种Annotation。

以下是@Retention注解的源码和RetentionPolicy的源码:


新梦想干货


7 .反射读取Annotation

使用Annotation修饰了类、方法、成员变量等之后,这些Annotation不会自己生效,必须通过相应程序提取并处理Annotation信息。Java提供的Annotation接口是所有注解的父接口,在JDK 5.0新增加AnnotatedElement接口,该接口提供读取运行时Annotation的方法。只有当自定义的Annotation使用了@Retention(RetentionPolicy.RUNTIME)时,该Annotation才会在运行可见,JVM才能读取保存在class文件的Annotation信息。

以下是AnnotatedElement接口提供的方法API:


新梦想干货


实际获取某类使用的Annotation信息的方式如下:


新梦想干货


8 .注解配置JDBC案例

使用JDBC连接MySQL数据库时,需要driverClassName、url、username和password四个参数。而之前的做法是将这四个参数写入一个配置文件,在JDBCUtils工具类中读取配置文件。目前可以将四个参数定义为一个注解,在JDBCUtils工具类中通过反射获取对应注解定义的四个参数内容。具体做法如下:

**第一步:定义一个Annotation用于定义JDBC连接MySQL数据库所需的四个参数内容。


新梦想干货


**第二步:**定义JDBCUtils工具类,使用Annotation配置四个参数内容,并使用反射进行读取。


新梦想干货


**第三步:**编写一个测试类用于测试JDBCUtils工具类是否正确。


新梦想干货


火热!

众所周知软件开发是一条前景越来越好的就业之路

随着科技的发展技术的更新,越来越多的大公司迫切的需要程序员!

选择软件开发,提升自我,改善现状,实现人生价值

你的潜力正待开发!

新梦想JAVA2班还剩少量余额!

报名热线:0731—88752969

报名地址:长沙市天心区五一大道五一新干线

快来报名吧!

大咖面授 免费试听

java EE开发之Servlet第十四课:自定义注解Annotation-IT知识库
技术支持 英铭科技