一、自定义一个注解,用于实体类的属性上,可以用在参数校验等处
import java.lang.annotation.*;
/**
* 自定义注解
* 使用在属性上
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AttributeDesc {
String notes() default "";//属性名称
boolean canNull() default false;//属性是否允许为null
String enumCode() default "";//属性是否属于枚举类型,""不是
}
二、注解构成
元注解;修饰符;关键字;注解名称;注解内元素
三、元注解
元注解:@Target,@Retention,@Document,@Inherited
@Target:应用范围
ElementType.TYPE | 应用于类、接口(包括注解类型)、枚举 |
ElementType.FIELD | 应用于属性(包括枚举中的常量) |
ElementType.METHOD | 应用于方法 |
ElementType.PARAMETER | 应用于方法的形参 |
ElementType.CONSTRUCTOR | 应用于构造函数 |
ElementType.LOCAL_VARIABLE | 应用于局部变量 |
ElementType.ANNOTATION_TYPE | 应用于注解类型 |
ElementType.PACKAGE | 应用于包 |
@Retention:生命周期
RetentionPolicy.SOURCE | 在源文件中有效(即源文件保留) |
RetentionPolicy.CLASS | 在class文件中有效(即class保留) |
RetentionPolicy.RUNTIME | 在运行时有效(即运行时保留) |
@Document:文档化申明
@Inherited:使用此注解的类的子类,也会继承注解
四、修饰符
必须是public
五、关键字
@interface
六、注解名称
此注解的名称。开发人员自由命名,遵循类名命名规范,务必做到望文生义
七、注解内元素
每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型。
参数支持类型:
1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
2.String类型
3.Class类型
4.enum类型
5.Annotation类型
6.以上所有类型的数组
通过default来声明参数的默认值:
注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null。
一般使用负数或者空字符串作为默认值。
参数的访问权限:
只能用public或默认(default)这两个访问权修饰。
PS:如果只有一个参数成员,最好把参数名称设为"value"
参考:
https://blog.csdn.net/zt15732625878/article/details/100061528
https://blog.csdn.net/yjclsx/article/details/52101922