注解

作者: 寂静的春天1988 | 来源:发表于2020-09-02 09:47 被阅读0次

自定义注解

public @interface User{
    
    String name() default "";
    
    int age();
}
@User(age = 10)
class Demo{
    
}

使用注解时,如果属性有默认值可以不用赋值。

public @interface User{
    
    String name() default "";
    
    String value() default "";
}
@User("123")
class Demo{
    
}

使用注解时,如果只给value属性赋值可以省略value=

注解属性的类型

1、8种基本类型
2、string
3、Enum
4、class
5、注解类型
6、以上5种的一维数组

public @interface User{
    int age();
    
    String name();
    
    MyEnum myEnum();
    
    Class a();
    
    MyAnno no();
    
    String[] arr();
}
enum MyEnum{
    A,B,C
}

@interface MyAnno{

    
}
@User(age = 10,name = "tom",myEnum = MyEnum.A,a = String.class,no = @MyAnno,arr = {"1","2","3"})
class Demo{
    
}

数组类型如果只有一个值可以省略{}

注解的作用目标限定

@Target(value = {ElementType.METHOD,ElementType.FIELD})
public @interface User{
    
}

使用@Target注解限定注解放的位置。

保留策略

  • 源代码文件(SOURCE):只在源代码中存在,编译时被忽略
  • 字节码文件(CLASS):在源代码存在,编译时会把注解信息放到class文件,但在JVM加载类时,会忽略注解!
  • JVM中(RUNTIME):注解在源代码、字节码中存在,并在JVM加载类时会把注解加载到内存中(是唯一可以反射的注解!)
@Retention(RetentionPolicy.RUNTIME)
public @interface User{
    
}

使用@Retention注解,限定保留策略

反射获得注解

@Retention(RetentionPolicy.RUNTIME)
public @interface User{
    String name();
}
@User(name="tom")
class Demo{
    @User(name="jack")
    public void demo() {
        
    }
}

    public static void main(String[] args) {
        // 获得作用目标
        Class<Demo> c=Demo.class;
        // 获得注解
        User user=c.getAnnotation(User.class);
        System.out.println(user.name());
        // 获得所有注解
        Annotation[] arr =c.getAnnotations();
    }

上面是获得类的注解,接下来获得方法上的注解

    public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        // 获得作用目标
        Class<Demo> c=Demo.class;
        Method method=c.getMethod("demo");
        // 获得注解
        User user=method.getAnnotation(User.class);
        System.out.println(user.name());
        // 获得所有注解
        Annotation[] arr =c.getAnnotations();
    }

相关文章

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • 注解与反射

    注解 声明一个注解类型 元注解 在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • 注解的使用

    元注解 注解 注解本质就是接口: 元注解:修饰注解的注解 自定义注解 Text.java FruitName.ja...

  • 注解

    Java注解 注解 元注解 自定义注解 元注解:负责注解其他注解 共有4个标准的meta-annotation类型...

  • Spring高级应用之组合注解和元注解

    1.核心概念: 元注解:可以注解在其他注解上的注解;被注解的注解成为组合注解; 2.组合注解的定义步骤 定义组合注...

  • 2016.10.13-关于注解的自定义和注解的解析

    注解可以分为:1、标识性注解(没有成员变量) 2、注解 3、元注解(注解的注解) 1、注解的自定义 自定义注解的格...

  • 自定义注解

    注解分类 1、代码注解2、编译时注解3、运行时注解 注解范例 使用注解的类 注解解析类 注解实战 需求1、有一张用...

  • 【JAVA】注解

    元注解 用来定义、声明注解的注解。 @Inherited注解 使用此注解声明出来的自定义注解,在使用此自定义注解时...

  • Spring Boot常用注解

    注解速览 配置加载相关 Bean 声明注解 Bean 注入注解 SpringMVC 注解 MyBatis 注解 配...

网友评论

      本文标题:注解

      本文链接:https://www.haomeiwen.com/subject/tcxpsktx.html