Java 注解

2021-11-17  本文已影响0人  Java慈祥

Java注解

注解

前言:

框架等于:注解 + 反射 + 设计模式~

JDK 5.0 开始, Java 增加了对元数据的支持, 也就是 Annotation(注解) 安闹太湿~

Annotation 其实就是代码里的 特殊标记, 这些标记可以在编译, 类加 载, 运行时被读取, 并执行相应的处理

Annotation 可以像修饰符一样被使用:

为什么要引用注解:

使用【注解】之前:

注解需要配合反射一起使用~

Java常见的 Annotation 实例:

@Override

@Deprecated

@SuppressWarnings

使用注解前面要加 @符号 当作一个修饰符使用,声明在类 方法 属性上!

自定义注解:

目前除了, JDK自带的注解,很多的框架也提供了很多的注解:

实现:

MyAnnotation

Idea 工具创建 Annotation 注解类:

image-20211114164504530.png

MyAnnotation

/** 自定义注解1.0 */
@Retention(RetentionPolicy.RUNTIME)                 //一种元注解: 标识注解的执行生命周期 (什么时候被执行!)
public @interface MyAnnotation {

    //这是自定义注解中,属性的声明方式: 数据类型 参数名;
//    String value();

    //指定成员变量的初始值可使用 default 关键字
    String value() default "wsm";                   /** 如果只有一个参数成员,建议使用参数名为value */
}

TestAnnotation.Java

package com.wsm.anotation;
import java.lang.annotation.Annotation;
/** 步骤2 */
public class TestAnnotation {
    public static void main(String[] args) {
        //使用反射,来完成注解是实习,这里只是简单的输出.
        //  很多时候反射,扫描所有的类,并判断注解的参数 完善类添新的功能~
        Class clazz = Wsm.class;
        Annotation[] annotations = clazz.getAnnotations();      //获取当前类的注解集合~
        for(int i = 0;i < annotations.length;i++){              //输出注解集合的值!
            System.out.println(annotations[i]);
        }
    }
}

/** 步骤1 */
//@MyAnnotation                     //啥也不写默认值~
//@MyAnnotation(value = "abc")      //手动填写
@MyAnnotation("efg")              //如果注解的只有一个属性且属性名是 value: 可以省略不写
class Wsm{
    //一个空的类,使用 自定义注解~
    @MyAnnotation
    public void show(){
        System.out.println("show方法()");
    }
}

元注解Meta-Annotation

什么是元注解:

Java5.0定义了4个标准的 Meta-Annotation类型 继承了:Java.lang.annotation.Annotation接口

元注解的作用就是负责注解其他注解: 它们被用来提供对其它 注解类型作说明; 修饰注解的注解

JDK 中的元注解 4:

@Retention

@Target

@Documented

@Inherited

JDK8.0 新增元注解

@Repeatable

JDK8.0 可重复注解使用:

定义可重复的注解容器注解

MyAnnotations

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotations {
    MyAnnotation[] value();             //注解属性,是可重复注解的数组~
}

MyAnnotation

import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MyAnnotations.class)           //1.8新增可重复注解,知道注解容器~
public @interface MyAnnotation {
    String value();                         //参数~
}

TestAnnotation.java

import java.lang.annotation.Annotation;

/** 步骤2 */
public class TestAnnotation {
    public static void main(String[] args) {
        //使用反射,来完成注解是实习,这里只是简单的输出.
        //  很多时候反射,扫描所有的类,并判断注解的参数 完善类添新的功能~
        Class clazz = Wsm.class;
        Annotation[] annotations = clazz.getAnnotations();      //获取当前类的注解集合~
        for(int i = 0;i < annotations.length;i++){              //输出注解集合的值!
            System.out.println(annotations[i]);
        }
    }
}

/** 步骤1 */
@MyAnnotation("abc")        //可重复注解,可以一次添加多个属性!
@MyAnnotation("efg")
class Wsm{
    //一个空的类,使用 自定义注解~
    public void show(){
        System.out.println("show方法()");
    }
}

运行结果:

@com.wsm.annotation2.MyAnnotations(value[@com.wsm.annotation2.MyAnnotation(value=abc),@com.wsm.annotation2.MyAnnotation(value=efg)])

输出了多个注解的 value

上一篇 下一篇

猜你喜欢

热点阅读