1,什么是注解
注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解
一般常用的注解可以分为三类:
一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。
一类为元注解,元注解是用于定义注解的注解,包括@Retention(标明注解被保留的阶段)、@Target(标明注解使用的范围)、@Inherited(标明注解可继承)、@Documented(标明是否生成javadoc文档)
一类为自定义注解,可以根据自己的需求定义注解
2,注解的用途
在看注解的用途之前,有必要简单的介绍下XML和注解区别,
注解:是一种分散式的元数据,与源代码紧绑定。
xml:是一种集中式的元数据,与源代码无绑定
当然网上存在各种XML与注解的辩论哪个更好,这里不作评论和介绍,主要介绍一下注解的主要用途:
生成文档,通过代码里标识的元数据生成javadoc文档。
编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证。
编译时动态处理,编译时通过代码里标识的元数据动态处理,例如动态生成代码。
运行时动态处理,运行时通过代码里标识的元数据动态处理,例如使用反射注入实例
3,注解使用演示
这边总共定义了4个注解来演示注解的使用
定义一个可以注解在Class,interface,enum上的注解,
定义一个可以注解在METHOD上的注解
定义一个可以注解在FIELD上的注解
定义一个可以注解在PARAMETER上的注解
具体代码如下:
/**
* 定义一个可以注解在Class,interface,enum上的注解
*
* @author zhangqh
* @date 2018年4月22日
*/
@Target({
ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnTargetType {
/**
* 定义注解的一个元素 并给定默认值
* @return
*/
String value() default "我是定义在类接口枚举类上的注解元素value的默认值";
}
/**
* 定义一个可以注解在METHOD上的注解
*
* @author zhangqh
* @date 2018年4月22日
*/
@Target({
ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnTargetMethod {
/**
* 定义注解的一个元素 并给定默认值
* @return
*/
String value() default "我是定义在方法上的注解元素value的默认值";
}
/**
* 定义一个可以注解在FIELD上的注解
*
* @author zhangqh
* @date 2018年4月22日
*/
@Target({
ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnTargetField {
/**
* 定义注解的一个元素 并给定默认值
* @return
*/
String value() default "我是定义在字段上的注解元素value的默认值";
}
/**
* 定义一个可以注解在PARAMETER上的注解
*
* @author zhangqh
* @date 2018年4月22日
*/
@Target(