0
点赞
收藏
分享

微信扫一扫

Java注解(Annotation)

hoohack 2022-01-06 阅读 181

目录

1、前言

2、JDK基本注解

2.1 @Override【重写】

2.2 @Deprecated【已过时 】

2.3 @SuppressWarnings(value = "unchecked") 【 压制编辑器警告】

3、JDK元注解【作用在其他注解的注解 】

3.1 @Retention【定义注解的保留策略】

3.2  @Target【标记这个注解应该是哪种Java 成员】

3.3  @Inherited【标记这个注解是继承于哪个注解类 】

3.4 @Documented【 标记这些注解是否包含在用户文档中】

4、自定义注解

5、注解分类

5.1 标记Annotation

5.2 元数据Annotation

6、提取Annotation信息


1、前言

  大家好,今天这篇博客是带大家简单了解一下 Java注解,让我们赶紧开始今天的旅程吧。

注解相关类都包含在java.lang.annotation包中。

2、JDK基本注解

2.1 @Override【重写】

  如果你使用MVC做为项目框架,在service层应该会经常看到。

2.2 @Deprecated【已过时 】

  已过时的方法会一条横线,我们把鼠标放上去,按住Ctrl点进去。
  这里就会发现它在这个方法上使用了@Deprecated这个注解。

2.3 @SuppressWarnings(value = "unchecked") 【 压制编辑器警告】

  这个如果你有强迫症,对你的代码容不得一点"黄色",就可以使用这个注解。

  我们现在加上这个注解。

3、JDK元注解【作用在其他注解的注解 】

3.1 @Retention【定义注解的保留策略】

3.1.1 Retention(RetentionPolicy.SOURCE)【一般情况下用不到】

3.1.2 @Retention(RetentionPolicy.CLASS)【如果括号里面上面什么都不写,默认】

3.1.3 @Retention(RetentionPolicy.RUNTIME)【用的最多!!!】

举例:这里我打开一个Controller。

  这个Controller上用了一个@RestController的注解,我们把鼠标放上去,按住Ctrl点进去。

  这上面的注解都是Java元注解。而这里面正好用到了@Retention(RetentionPolicy.RUNTIME)。

3.2  @Target【标记这个注解应该是哪种Java 成员】

3.2.1   @Target(ElementType.TYPE) 【接口、类 (包括注释类型)或枚举声明

3.2.2   @Target(ElementType.FIELD)【字段声明(包括枚举常量)* 】

3.2.3   @Target(ElementType.METHOD) 【方法声明 】

3.2.4   @Target(ElementType.PARAMETER) 【方法参数声明】

3.2.5   @Target(ElementType.CONSTRUCTOR) 【构造函数声明】

3.2.5   @Target(ElementType.LOCAL_VARIABLE) 【局部变量声明】

3.2.6   @Target(ElementType.ANNOTATION_TYPE)【 注释类型声明

3.2.7   @Target(ElementType.PACKAGE) 【 包声明

举例:还是上面Controller用的@RestController

  它这里使用@Target(ElementType.TYPE),我们来试试看能不能作用在其他的地方。

  在这里我们发现,它作用于属性和方法上都报错了,所以它真的只能作用于接口或类上!大家如果有兴趣现在可以把自己用过的注解一个一个点进去看看。

3.3  @Inherited标记这个注解是继承于哪个注解类 】

举例:以@Transactional这个注解为例  

 我们点进去看看。

我们就可以看到@Inherited这个注解,只要带有@Inherited这个元注解,说明@Transactional这个注解有继承性。

假如A这个接口使用了@Transactional这个注解,因为@Transactional这个注解上使用@Inherited这个注解,那B这个实现类去实现A这个接口,那B实现的所有方法里面都有事务,这就是继承性。

3.4 @Documented【 标记这些注解是否包含在用户文档中】

 这里推荐看: IDEA如何使用javadoc工具导出API 文档和注解@Documented的具体作用_英杰的学习日记的博客-CSDN博客icon-default.png?t=LBL2https://blog.csdn.net/weixin_53041251/article/details/122333117

4、自定义注解

  像@RestController@GetMapping等等,这些都是第三方框架提供给我们的注解,它们都是自定义的注解。  

举例:

 这上面就是一个自定义的注解,是不是感觉挺简单的,接下来我们来打开一个Demo。

我们在这个@MyAnnotation1自定义注解上使用了@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD}),所以它能同时作用于类和属性上。

而且我们看到了括号里有我们在注解里声明的属性name,如果我们将其省略,只写值。

 我们会发现它报错了,但有一种情况下,它不会报错,就是我们把属性名改成value

  当然,这个前提条件是你只输入一个属性的值。如果有多个属性的值,他还是会报错的。

  小结:

@Inherited

@Retention(RetentionPolicy.RUNTIME)
   
@Target({ElementType.METHOD, ElementType.TYPE})
   
public @interface Tag {

     String name() default "该叫啥才好呢?";


     String description() default "这家伙很懒, 啥也没留下...";

}

5、注解分类

5.1 标记Annotation

5.2 元数据Annotation

6、提取Annotation信息

 举例:

 我们打开一个测试类,实验一下。

 

在上面我们说了class实现了AnnotatedElement接口,而AnnotatedElement有一个getAnnotation的方法,我们调用,最后得到一个注解对象annotation,我们再用annotation去点name这个属性,打印。  

 

举报

相关推荐

0 条评论