通过反射操作注解
Posted 小郑要做干饭人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过反射操作注解相关的知识,希望对你有一定的参考价值。
package com.zzx.反射;
import java.lang.annotation.*;
import java.lang.reflect.Field;
/**
* @date: 2022/08/08/ 23:31
* @author: ZhengZiXuan
* @title: 通过反射操作注解
* @focus:
* Annotation: Annotation是从Jdk5.0开始引入的新技术
* 作用:
* 1.不是程序本身,可以对程序作出解释(和注释(comment)没什么区别)
* 2.可以被其他程序(例如:编译器)获取
* 格式:
* 1.注解是以"@注释名"在代码中存在的,还可以添加一些参数值,例如@SupperessWarnings(value ="unchecked")
* 使用场景:
* 可以附加在package,class,method,filed上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现
* 对这些元数据的访问
*/
public class Test01
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException
Class c = Class.forName("com.zzx.反射.Teacher");
//t通过反射获得注解
Annotation[] annotations = c.getAnnotations();
for (Annotation annotation : annotations)
System.out.println(annotation);
//获得注解的value的值
ZhengZiXuan zhengZiXuan = (ZhengZiXuan)c.getAnnotation(ZhengZiXuan.class);
String value = zhengZiXuan.value();
System.out.println(value);
//获得类指定的注解
Field name = c.getDeclaredField("name");
FiledZheng annotation = name.getAnnotation(FiledZheng.class);
System.out.println(annotation.columnName());
System.out.println(annotation.type());
System.out.println(annotation.let());
/**
* 1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
* 2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
* 3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
*/
@ZhengZiXuan("db_teacher")
class Teacher
@FiledZheng(columnName = "db_id",type = "int",let = 10)
private String id;
@FiledZheng(columnName = "name",type = "varchar" , let = 10)
private String name;
@FiledZheng(columnName = "age",type = "int" , let = 5)
private String age;
public String getId()
return id;
public void setId(String id)
this.id = id;
public String getName()
return name;
public void setName(String name)
this.name = name;
public String getAge()
return age;
public void setAge(String age)
this.age = age;
@Override
public String toString()
return "Teacher" +
"id='" + id + '\\'' +
", name='" + name + '\\'' +
", age='" + age + '\\'' +
'';
//类名的注解
@Target(ElementType.TYPE)//级别:类
@Retention(RetentionPolicy.RUNTIME)
@interface ZhengZiXuan
String value();
//属性的注解
@Target(ElementType.FIELD)//级别:属性
@Retention(RetentionPolicy.RUNTIME)
@interface FiledZheng
String columnName();
String type();
int let();
运行结果如下:
以上是关于通过反射操作注解的主要内容,如果未能解决你的问题,请参考以下文章
反射动态操作类+注解灵活打标签 | 反射注解结合灵活高效实战
IOC 控制反转Android 事件依赖注入 ( 事件依赖注入具体的操作细节 | 获取要注入事件的 View 对象 | 通过反射获取 View 组件的事件设置方法 )