注解

注解

解释

  • 注解不同于注释,注释是给开发者看的,便于更加方便的理解程序,注解是给JVM识别的。
  • 所有的Java类都是Object的子类
  • 所有的Annotation都是java.lang.annotation.Annotation的子类
  • Annotation通常作用于pagkage、Class、Field、Method上面
    JDK 提供的几个特俗的Annotation,称为元Annotation,只能用在Annotation上面。

常用注解

  • @ Target (jdk提供)
    表示定义的注解作用在哪里
    * ElementType.TYPE:class、interface、Enum 类、接口、枚举
    * ElementType.Field:Field 字段
    * ElementType.Method:Method 方法
  • Retention
    表示注解的保留策略
    * RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
    * RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
    * RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;

示例:
Column

//注解放到字段上面
@Target(ElementType.TYPE)
//运行时保留,可以通过反射获取
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {

  public   String name() default "jack";

    public  String value();

    public String address() default  "";

}
User.java
@Column(name = "zhangsan" ,value = "12",address = "北京市")
public class User {

    public static  void Say(String name,String value,String address)
    {
        System.out.println("name:"+name+" --value:"+value+"--address:"+address);
    }

}

main


public static  void  main(String [] args)
    {
        User user=new User();
        Class<? extends User> aClass = user.getClass();
        Column annotation = aClass.getAnnotation(Column.class);
        if(annotation!=null) {
            try {
                String address = annotation.address();
                String name = annotation.name();
                String value = annotation.value();

                Method say = aClass.getMethod("Say", String.class, String.class, String.class);
                say.invoke(user,name,value,address);

            } catch (Exception ex) {

                ex.printStackTrace();
            }

        }




    }

原文地址:https://www.cnblogs.com/lilihai/p/10223628.html