JavaSE---注解

文章目录

    • 什么是注解?
    • 注解有什么作用?
    • 内置注解
    • 元注解
    • 自定义注解
    • 如何使用自定义注解(反射)
    • 总结

什么是注解?

  • 注解(Annotation):在JDK1.5中引入,代码中的特殊标记,这些标记可以在编译,类加载,运行时被程序读取,并执行相对应的处理。
  • 注释给程序员看,注解给编译器看。
  • 就目前我常用到的注解有:@overide@Test@Autowired,特别是自动装配的注解,提供了强大的功能。
  • 基本Annotation
    java.lang包下,用于常用于标记该方法,抑制编译器警告等。相当于给他们添加了额外的辅助信息。
  • 元Annotaion
    java.lang.annotation包下,常用于修饰其他的Annotation定义。

注解有什么作用?

  • 传统方式是通过配置XML文件的方式来告诉类要如何运行。
  • 现在,我们可以通过加注解的方式告诉类如何运行。
  • 让编译器检查代码
  • 将数据注入到方法、成员变量、类上。

内置注解

java.lang包下有五个基本的注解。

  • @Override 重写注解
  • @Deprecated 过时注解
  • @SuppressWarnings("all") 抑制编译器警告,all:全部镇压
  • @SafeVarargs是jdk7中堆污染警告
  • @Functionallnterface 显示指定该接口是函数式接口

元注解

负责注解其他的注解。

  • @Target 用于描述注解的使用范围(被描述的注解可以用在什么地方)

  • @Retention表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCERUNTIME,保证在运行的时候,注解还是有效的。

  • @Document说明该注解被包含在javadoc中

  • @Inherited 子类可以继承父类的注解

JavaSE---注解_第1张图片

自定义注解

使用@interfae自定义注解时,自动继承java.lang.annotation.Annotation接口。

  1. 格式:public @interface 注解名{定义内容},在类中声明的时候要把public去掉。
  • 在注解上定义的成员变量只能是String,数组,Class,枚举类,注解

JavaSE---注解_第2张图片

如何使用自定义注解(反射)

  • 赋值
 //注解拥有什么属性,在修饰的时候就要给出相对应的值
    @MyAnnotation(username = "zhangsan", age = 20)
    public void add(String username, int age) {
    }
  • 在注解声明属性的时候,给出默认值,修饰的时候就不需要给出具体的值了。
public @interface MyAnnotation {
    //定义了两个成员变量
    String username() default "zicheng";
    int age() default 23;
}
  • 把自定义注解的基本信息注入到方法上(利用反射技术)
    要事先在自定义注解上加上这样一段代码:
    @Retention(RetentionPolicy.RUNTIME)
  • 自动注入过程:
    ①反射出该类的方法
    ②通过方法得到注解上具体的信息
    ③将注解上的信息注入到方法上
    //注解拥有什么属性,在修饰的时候就要给出相对应的值
    @Retention(RetentionPolicy.RUNTIME)
    @MyAnnotation(username = "zhongfucheng", age = 20)
    public void add(String username, int age) {
    }
    //反射出该类的方法
    Class c1 = Demo2.class;
    Method method = c1.getMethod("add", String.class, int.class);

    //通过该方法得到注解上的具体信息
    MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
    String username = annotation.username();
    int age = annotation.age();

   // 将注解上的信息注入到方法上
    Object o = c1.newInstance();
    method.invoke(o, username, age);

总结

  • 对象注入方法的过程:
    ①得到想要注入到类中的属性
    ②得到该属性的对象
    ③得到属性对应的写方法
    ④通过写方法得到注解
    ⑤获取注解详细的信息
    ⑥将注解的信息注入到对象上
    ⑦调用属性写方法,将已填充数据的对象注入到方法中

你可能感兴趣的:(java,SE基础知识点)