java注解是附加在代码中的一些元信息, 用于一些工具在编译、运行时进行解析和使用, 起到说明、配置的功能(配合反射使用,通过反射读取解析注解的内容)
public class Student{ @override public void test1(){ } }
自定义注解语法
public @interface 注解名 {定义体} public @interface 注解名 { String value() default "默认值"; } @Documented //注解的类型(使用的地方) @Target({ElementType.TYPE}) //生命周期(一般使用RUNTIME) @Retention(RetentionPolicy.RUNTIME) public @interface MyTable { //注解元,类似于类中定义的属性 String value() default ""; //int type() default 0; }
注解参数的可支持数据类型:
1.所有基本数据类型(int,float,boolean,byte,double,char,long,short) 2.String类型 3.Class类型 4.enum类型 5.Annotation类型 6.以上所有类型的数组
@Documented
表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。
@Target
表示支持注解的程序元素的种类,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上。 注解目标 ElementType 1.CONSTRUCTOR:用于描述构造器 2.FIELD:用于描述属性 3.LOCAL_VARIABLE:用于描述局部变量 4.METHOD:用于描述方法 5.PACKAGE:用于描述包 6.PARAMETER:用于描述参数 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Inherited
表示一个注解类型会被自动继承,如果用户在类声明的时候查询注解类型,同时类声明中也没有这个类型的注解,那么注解类型会自动查询该类的父类,这个过程将会不停地重复,直到该类型的注解被找到为止,或是到达类结构的顶层(Object)。
@Retention
表示注解类型保留时间的长短,它接收RetentionPolicy参数,可能的值有SOURCE, CLASS, 以及RUNTIME。 注解生命周期 1.SOURCE:在源文件中有效(即源文件保留) 2.CLASS:在class文件中有效(即class保留) 3.RUNTIME:在运行时有效(即运行时保留)
自定义注解使用场景
通用Dao
实体类类名和表名不一致的时候
实体类属性名和表中的列名不一致的时候