前言:
Java注解是一种元数据机制,可用于方法,字段,类等程序上以提供关于这些元素的额外信息。
以下内容是我自己写的一个小测试的demo,参考该文章进行编写:https://blog.csdn.net/m0_71621983/article/details/131816443
1.自定义注解
注:在该注解中定义了num属性,设置默认值,引用该注解可以对num属性进行额外赋值
属性类型可以是任意类型,字符串,枚举,数值等等…
java.lang.annotation提供了五种元注解:
@Documented – 注解是否将包含在JavaDoc中
@Retention – 什么时候使用该注解
@Target – 注解用于什么地方
@Inherited – 是否允许子类继承该注解
@Repeatable - 是否可重复注解,jdk1.8引入
类上引用了@Target注解,表示这个注解应用到哪个元素上,包含以下范围值:
public enum ElementType {
/** 类,接口(包括注解类型)或枚举的声明 */
TYPE,
/** 属性的声明 */
FIELD,
/** 方法的声明 */
METHOD,
/** 方法形式参数声明 */
PARAMETER,
/** 构造方法的声明 */
CONSTRUCTOR,
/** 局部变量声明 */
LOCAL_VARIABLE,
/** 注解类型声明 */
ANNOTATION_TYPE,
/** 包的声明 */
PACKAGE,
/** 类型参数声明(jdk1.8加入) */
TYPE_PARAMETER,
/** 任意类型(jdk1.8加入) */
TYPE_USE
}
@Retention
public enum RetentionPolicy {
/** 注解将被编译器忽略掉 */
SOURCE,
/** 注解将被编译器记录在class文件中,但在运行时不会被虚拟机保留,这是一个默认的行为 */
CLASS,
/** 注解将被编译器记录在class文件中,而且在运行时会被虚拟机保留,因此它们能通过反射被读取到 */
RUNTIME
}
2.创建一个实体类,定义该注解
以上实体类的属性引用该自定义注解,设置注解的额外值
3.对注解的值进行校验处理
输出结果:
name名字-输出.num()----------------------
name名字-输出.bean----------------------
codeTab-输出.num()----------------------
new_codeTab-输出.bean--------------------
输出值1:直接输出注解的num值
输出值2:输出field的属性值,该field在此代码中进行了set()方法赋值操作,如果没有set()则输出null
bean的对象属性值[name=“name名字”,number=null,tab=“new_codeTab”]
注:如果代码中没有使用field.set()进行赋值,则bean属性都为null
Field类具体方法的一些用法可以参考这篇文章:https://blog.csdn.net/yyuggjggg/article/details/126021525
在要使用该注解的地方调用该映射方法,传入要映射的bean对象!