package com.example.study.reflex.demo2;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
/**
* @author: smy
*/
public class App {
}
/**
* 反射操作注解
*/
class Test2{
public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException {
/**
* 获取类注解
*/
Class<Student> c1 = Student.class;
Table table = c1.getAnnotation(Table.class);
System.out.println(table.value());
/**
* 获取属性注解
*/
Field f1 = c1.getDeclaredField("id");
Column column = f1.getAnnotation(Column.class);
System.out.println(column.columnName());
System.out.println(column.type());
System.out.println(column.length());
/**
* 获取方法注解
*/
Method getId = c1.getDeclaredMethod("getId");
MyMethod myMethod = getId.getAnnotation(MyMethod.class);
System.out.println(myMethod.value());
}
}
@Table("student")
class Student{
@Column(columnName = "id",type = "int",length = "10")
private int id;
@MyMethod("get")
public int getId() {
return id;
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Table{
String value();
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Column{
String columnName();
String type();
String length();
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface MyMethod{
String value();
}