【Java】Annotation 解释与说明

 

目录

一. 问题

二. 说明与解释

2.1 Java 元注解

2.2 Documented 注解

2.3 Retention 注解

2.4 Target 注解

2.5 Inherited 注解

三. 参考


 

一. 问题

 

啥是注解?

 

注解是用来干啥的?

 

Documented 是啥?

Retention 是啥?

Target 是啥?

Inherited 是啥?

ElementType 是啥?

 

不知道为啥,辛辛苦苦写的表格,突然被机器给吞了 ?

 

刚开始接触到这玩意的时候,一脸懵逼,我们看java.lang.annotation 包下都有啥,如下所示:

+java
    +lang
        +annotation
            -Annotation
            -AnnotationFormatError
            -AnnotationTypeMismatchException
            -Documented
            -ElementType
            -IncompleteAnnotationException
            -Inherited
            -Native
            -Repeatable
            -Retention
            -RetentionPolicy
            -Target

 

二. 说明与解释

 

哎,有时候中英文机器翻译,堪忧;

 

2.1 Java 元注解

Java 中使用的元注解有四种:

  • @Documented
  • @Retention
  • @Target
  • @Inhertited

 

2.2 Documented 注解

指示某一类型的注解将通过 javadoc 和类似的默认工具进行文档化。应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。如果类型声明是用 Documented 来注释的,则其注释将成为注释元素的公共 API 的一部分。

 

简单理解,就是@Documented 注解标注的注解会被javadoc 自动化工具文档收录;

 

2.3 Retention 注解

指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS

只有元注释类型直接用于注释时,Target 元注释才有效。如果元注释类型用作另一种注释类型的成员,则无效。

简单理解,就是@Retention 注解标注的注解保留多长,默认保留策略为: RetentionPolicy.CLASS;

@Retention 有如下三种类型保留策略:

序列保留策略描述备注
1 RetentionPolicy.CLASS编译器将把注解记录在类文件中,但在运行时 VM 不需要保留注解。默认策略
2 RetentionPolicy.RUNTIME编译器将把注解记录在类文件中,在运行时 VM 将保留注解,因此可以反射性地读取。 
3 RetentionPolicy.SOURCE编译器要丢弃的注解。 

 

只有RetentionPolicy.RUNTIME 时期的注解策略,VM 才能借助于反射动态的读取该注解标识符;

 

2.4 Target 注解

指示注解类型所适用的程序元素的种类。

如果注解类型声明中不存在 Target 元注解,则声明的类型可以用在任一程序元素上。

如果存在这样的元注解,则编译器强制实施指定的使用限制。

 

简单理解,就是@Target 注解标注的注释的作用域,有如下几种类型:

序列注解类型描述备注
1ElementType.ANNOTATION_TYPE 注解类型声明 
2ElementType.CONSTRUCTOR构造方法声明 
3ElementType.FIELD字段声明(包括枚举常量) 
4ElementType.LOCAL_VARIABLE 局部变量声明 
5ElementType.METHOD 方法声明 
6ElementType.PACKAGE 包声明 
7ElementType.PARAMETER参数声明 
8ElementType.TYPE类、接口(包括注释类型)或枚举声明 
9ElementType.TYPE_PARAMETER类型参数声明Since 1.8
10ElementType.TYPE_USE类型使用声明Since 1.8

 

2.5 Inherited 注解

指示注解类型被自动继承。

如果在注解类型声明中存在 Inherited 元注解,并且用户在某一类声明中查询该注解类型,同时该类声明中没有此类型的注解,则将在该类的超类中自动查询该注解类型。此过程会重复进行,直到找到此类型的注解或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注解,则查询将指示当前类没有这样的注解。

 

注意: 如果使用注解类型注解类以外的任何事物,此元注解类型都是无效的。还要注意,此元注解仅促成从超类继承注解;对已实现接口的注解无效。

简单理解,就是@Inherted 注解标注的注解可继承父元注解中的注解;

 

三. 参考

  1. https://www.oracle.com/cn/java/technologies/java-se-api-doc.html;
  2. https://docs.oracle.com/javase/8/docs/api/;
  3. https://tool.oschina.net/apidocs/apidoc?api=jdk-zh;

 

 

(完)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个错误消息说明你的程序找不到javax.servlet.annotation这个包。这个包是Java Servlet API的一部分,是用于开发Java Web应用程序的标准接口。如果你的程序需要使用这个包,你需要在你的项目中导入它。 通常情况下,你可以通过下载并安装Java Servlet API的实现来解决这个问题。你可以在Apache Tomcat或Jetty等Web服务器上找到这个实现。 如果你使用的是Eclipse或IntelliJ IDEA等开发工具,你可以通过在项目的配置中添加这个包的依赖来解决这个问题。 总的来说,如果你遇到了这个错误,你需要确保你的程序有访问javax.servlet.annotation这个包的权限。 ### 回答2: 当出现"程序包javax.servlet.annotation不存在"的错误时,通常是由于以下几种原因造成的: 一、 缺少相关的jar包 javax.servlet.annotationjavax.servlet-api包中的一个子包,因此在使用javax.servlet.annotation相关的功能时,需要先导入javax.servlet-api包。如果缺少了这个包,就会出现该错误。 解决方法:在项目的依赖中增加javax.servlet-api包。 二、 项目的Web容器版本不兼容 某些Web容器不支持javax.servlet.annotation包中的所有功能或版本不一致,就会出现该错误。 解决方法:尝试使用与Web容器兼容的javax.servlet.annotation的版本,或者更新Web容器版本以支持使用该功能。 三、项目缺少web.xml配置文件 在某些情况下,项目缺少web.xml配置文件可能会引起该错误。web.xml配置文件是Java Web应用程序中的配置文件,它包含了Web应用程序的配置信息。 解决方法:在项目的WEB-INF目录下添加web.xml文件。 总结:出现"程序包javax.servlet.annotation不存在"的错误通常是由缺少相关的jar包、项目的Web容器版本不兼容或项目缺少web.xml配置文件等原因造成的。因此在解决该问题时,需要根据具体情况采取相应的解决方法。 ### 回答3: Javajavax.servlet.annotation程序包是Java Servlet API的一部分,其中包含用于编写Web应用程序的注解。常见的映射注解包括@WebServlet、@WebFilter、@WebListener和@MultipartConfig。这些注解使开发人员能够轻松地映射Servlet、过滤器、监听器和处理文件上传的servlet容器配置。如果在Java项目中使用了这些注解并且没有手动导入javax.servlet.annotation包,那么就会出现错误“程序包javax.servlet.annotation不存在”。 解决方法: 1. 检查项目的依赖项:在项目中使用javax.servlet.annotation程序包之前,确保在项目中添加了Java Servlet API依赖项。可以在Maven或Gradle中添加以下依赖项: Maven: ``` <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0</version> </dependency> ``` Gradle: ``` compile 'javax.servlet:javax.servlet-api:4.0.0' ``` 2. 导入javax.servlet.annotation包:如果Java Servlet API依赖项已经添加到项目中,但仍然遇到错误“程序包javax.servlet.annotation不存在”,则需要手动导入javax.servlet.annotation包。可以通过在代码中添加以下导入语句来实现: ``` import javax.servlet.annotation.WebServlet; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebListener; import javax.servlet.annotation.MultipartConfig; ``` 3. 检查Servlet API版本:如果以上两种方法都没有解决问题,则可能是由于使用的Java Servlet API版本过低而导致的。请升级到最新版本的Java Servlet API,并再次尝试导入javax.servlet.annotation包。 总之,如果发现项目中出现“程序包javax.servlet.annotation不存在”的错误,首先应该检查Java Servlet API依赖项是否已经添加,并手动导入javax.servlet.annotation包。如果仍有问题,则可能需要升级Java Servlet API版本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值