注解

作者: 鉴闻俗说 | 来源:发表于2017-12-05 10:38 被阅读0次

一、 Annotation的工作方式

Annotation并不会直接影响程序的语义,它的工作方式类似于程序的类库或者工具,它反过来会对程序的语义有所影响。Annotation可以从源文件、class文件或者以运行时反射的多种方式被读取。

二、 几个常用的注解

1、Override注解表示子类要重写父类对应的方法。
2、Deprecated注解表示方法不建议被使用;
3、SurpressWarnings注解表示一直警告。
4 、Retentoion注解用于在定义主解时修饰注解该如何读取。在使用时必须搭配属性value,value的取值是一个RetentionPolicy枚举类型:

@Retention(RetentionPolicy.RUNTIME) //表示在运行时反射获取Annotation
//@Retention(RetentionPolicy.CLASS) //表示从class文件获取Annotation
//@Retention(RetentionPolicy.SOURCE) //表示从源文件获取Annotation

5 、Target注解用于在定义主解时限定注解的使用位置。在使用时也必须搭配属性value,value的去值是一个ElementType枚举类型:

//不同的枚举类型表示该注解只能作用的位置
@Target(value = ElementType.METHOD)
//@Target(value = ElementType.ANNOTATION_TYPE)
//@Target(value = ElementType.CONSTRUCTOR)
//@Target(value = ElementType.FIELD)
//@Target(value = ElementType.LOCAL_VARIABLE)
//@Target(value = ElementType.PACKAGE)
//@Target(value = ElementType.PARAMETER)
//@Target(value = ElementType.TYPE)
//@Target(value = ElementType.TYPE_PARAMETER)
//@Target(value = ElementType.TYPE_USE)

三、 自定义注解

1、自定义注解时,当注解的属性名时value时,对其赋值时可以不指定属性名称直接写上属性值即可;除了value之外其他的属性都必须以name = value的方式赋值。
2、Demo

(1) 自定义的注解

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

@Retention(RetentionPolicy.RUNTIME) //表示在运行时反射获取Annotation
//@Retention(RetentionPolicy.CLASS) //表示从class文件获取Annotation
//@Retention(RetentionPolicy.SOURCE) //表示从源文件获取Annotation
public @interface MyAnnotation
{
    String hello() default "hello";
    String world();
    
}

(2)注解的使用

public class MyTest
{
    @MyAnnotation(hello = "tiangjin", world = "shanghai")
    @Deprecated
    @SuppressWarnings("unchecked")
    public void output()
    {
        System.out.println("output something!");
    }
}

(2)利用反射查看注解

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;

public class MyReflectTest
{
    public static void main(String[] args) throws Exception
    {
        MyTest myTest = new MyTest();
        
        Class<?> c =myTest.getClass();
        Method method = c.getMethod("output", new Class[] {});
        
        if (method.isAnnotationPresent(MyAnnotation.class))
        {
            method.invoke(myTest, new Object[] {});
    
            MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
            
            String hello = myAnnotation.hello();
            String world = myAnnotation.world();
            System.out.println(hello + " " + world);
        }
        
        
        Annotation[] annotations = method.getAnnotations();
        for(Annotation annotation : annotations)
            System.out.println(annotation.annotationType().getName());
    }
}

四、 注解的继承关系

默认情况下,子类是不会继承父类中的Annotation的,如果想要继承父类中的某些Annotation,需要在在定义该Annotation形态时加上java.lang.Annoatation.Inherited形态的Annotation。

上一篇: 动态代理模式
下一篇:JUnit单元测试

相关文章

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 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/uhpfixtx.html