Java - Framework - Annotation(注解)
来源:互联网 发布:无限试驾2优化 编辑:程序博客网 时间:2024/06/16 17:37
注解是附加在代码中的一些元信息,可以对字段、方法以及类进行说明或配置。一些编译工具或者Java虚拟器可以载编译期或者运行时根据 注解来动态的编译或者执行代码。
1、元注解:
元注解是指注解的注解,包括@Retention、@Target、@Document、@Inherited四种。
@Retention:定义注解的保留策略,取值如下:
@Retention(RetentionPolicy.SOURCE):注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS):默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME):注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target:定义注解的作用目标,取值如下:
@Target(ElementType.TYPE):作用于类、接口、枚举
@Target(ElementType.FIELD):作用于字段
@Target(ElementType.METHOD):作用于方法
@Target(ElementType.PARAMETER):作用于方法参数
@Target(ElementType.CONSTRUCTOR):作用于构造函数
@Target(ElementType.LOCAL_VARIABLE):作用于局部字段(方法内部定义的字段)
@Target(ElementType.ANNOTATION_TYPE):作用于注解
@Target(ElementType.PACKAGE):作用于包
@Document:说明该注解将被包含在Java Doc中。当使用java的导出doc的命令式定义了该注解的注解将会包含在Java Doc中
@Inherited:定义该注解可以被继承。子类可以继承父类中定义了该注解的注解。
2、自定义注解:
1、元注解:
元注解是指注解的注解,包括@Retention、@Target、@Document、@Inherited四种。
@Retention:定义注解的保留策略,取值如下:
@Retention(RetentionPolicy.SOURCE):注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS):默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME):注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target:定义注解的作用目标,取值如下:
@Target(ElementType.TYPE):作用于类、接口、枚举
@Target(ElementType.FIELD):作用于字段
@Target(ElementType.METHOD):作用于方法
@Target(ElementType.PARAMETER):作用于方法参数
@Target(ElementType.CONSTRUCTOR):作用于构造函数
@Target(ElementType.LOCAL_VARIABLE):作用于局部字段(方法内部定义的字段)
@Target(ElementType.ANNOTATION_TYPE):作用于注解
@Target(ElementType.PACKAGE):作用于包
@Document:说明该注解将被包含在Java Doc中。当使用java的导出doc的命令式定义了该注解的注解将会包含在Java Doc中
@Inherited:定义该注解可以被继承。子类可以继承父类中定义了该注解的注解。
2、自定义注解:
不带属性的注解:
示例:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Get {}
使用:
@Getpublic class SignupRequest{ }
带有属性的注解:
示例:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Path { public String path();}
使用:
@Path(path="VisitorRegister.ashx")public class SignupRequest{ }
说明:
当只有一个属性,属性名称又是value的时候,在使用时属性名可以省略不写,例如:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Path { public String value();}
@Path("VisitorRegister.ashx")public class SignupRequest{ }
当有多个属性时,多个属性的定义使用英文逗号(,)隔开,并且即使属性名称是value也不能省略不写
示例:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Path { public String value(); public int count();}
使用:
@Path(value = "nihao", count = 0)public class BaiduRequest{}
属性还可以定义默认值,定义了默认值的属性在使用注解时可以不写此属性:
示例:
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface Path { public String value(); public int count() default 100;}
使用:
@Path("nihao")public class BaiduRequest{}
属性的类型可以是byte、byte[]、short、short[]、int、int[]、long、long[]、float、float[]、double、double[]、char、char[]、boolean、boolean[]、String、String[] enum、Anntation之一。
3、解析注解:
获取到注解之后直接调用方法即可获取相应的参数
示例:
@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)public @interface Host { public String port(); public String value();}
@Host(port="123", value = "sfs")public class User {}
public class Test { public static void main(String... strings){ Host host = User.class.getAnnotation(Host.class); System.out.println(host.port()); System.out.println(host.value()); }}
第二种当然就是反射了。具体怎么用在这里就不说了。
- Java - Framework - Annotation(注解)
- JAVA 注解(annotation)
- java 注解(Annotation)
- java 注解(annotation)
- JAVA 注解(Annotation)
- Java 注解(annotation)
- Java注解(Annotation)
- Java:注解(Annotation)
- java注解(Annotation)
- Java - Annotation(注解)
- Java 注解(annotation)
- 注解(annotation)-java
- java注解(annotation)
- java注解(Annotation)
- java 注解(Annotation)
- java 注解(annotation)
- Java注解(Annotation)
- Java注解(Annotation)
- iPad横屏(Landscape)尺寸规格说明
- VC6.0中如何彻底删除一个已经添加的类
- 对NAT协议的理解
- java关于反射的粗略小结
- forward的细节
- Java - Framework - Annotation(注解)
- WebService 通过POST方式访问时候,因 URL 意外地以“/方法名”结束,请求格式无法识别 解决办法
- HDU1997:汉诺塔VII
- hdu 1026
- VC Data Time Picker 控件详解
- 程序员真的不值钱了吗?
- FFT算法在单片机中的使用&&LCD12864驱动 (2011-08-03 09:54:20)
- Java中finally
- Easier Done Than Said?