注解在开发中使用

1.开发中常见的注解:

1.1.注解@param @return 和 @exception

这三个标记都是只用于方法的

  • @param的格式要求:@param 形参名 形参类型 形参说明
  • @return 的格式要求:@return 返回值类型 返回值说明
  • @exception的格式要求:@exception 异常类型 异常说明
  • @param和@exception可以并列多个

1.2.JDK内置的三个基本注解

在编译时进行格式检查(JDK内置的三个基本注解)

  • @Override: 限定重写父类方法, 该注解只能用于方法
  • @Deprecated: 用于表示所修饰的元素(类, 方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择
  • @SuppressWarnings: 抑制编译器警告

1.3.Servlet3.0提供了支持注解

跟踪代码依赖性,实现替代配置文件

  • 1.Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署

1.4.spring框架中支持注解

  • 1.关于事务的管理对注解的支持

2.开发中实现自定义注解

2.1.自定义注解过程:

  • 1.自定义注解自动继承了java.lang.annotation.Annotation接口
  • 2.Annotation 的属性(成员变量)在 Annotation 定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能是八种基本数据类型、String类型、Class类型、enum类型、Annotation类型以上所有类型的数组
  • 3.可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用 default 关键字
  • 4.如果只有一个成员变量(属性)建议使用参数名为value
  • 5.如果定义的注解含有配置参数,那么使用时必须指定参数值除非它有默认值。指定参数值的格式是:("参数名 = 参数值")若只有一个参数成员,且名称为value,可以省略"value="
  • 6.没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数据 Annotation
    • Override注解就是一个标记
  • 7.注意:自定义注解必须配上注解信息处理流程(使用反射)才有意义

3.JDK中的元注解

3.1.什么是元注解:

  • 1.对现有的注解进行解释说明的注解被称之为元注解
  • 2.jdk提供了4种元注解;
    • Retention
    • Target
    • Documented
    • Inherited
  • 3.元数据的理解:对现有数据进行修饰的数据,叫做元数据,这里的name,String都可以称之为元数据:String name = "atguigu"

3.2.元注解介绍:

a.元注解 -> @Retention:

  • 1.@Retention: 只能用于修饰一个注解定义, 用于指定该注解的生命周期,
  • 2.@Rentention 包含一个 RetentionPolicy 类型的成员变量, 使用@Rentention 时必须为该 value 成员变量指定值
    • RetentionPolicy.SOURCE:仅仅在源文件中有效(即源文件保留),在编译器直接丢弃这种策略的注释
    • RetentionPolicy.CLASS:在class文件中有效(即class保留) ,当运行 Java 程序时, JVM 不会保留注解。 这是默认值
    • RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行 Java 程序时, JVM 会保留注释程序可以通过反射获取该注释

b.元注解 -> @Target

  • 1.用于修饰注解定义, 用于指定被修饰的注解能用于修饰哪些程序元素
  • 2.@Target 也包含一个名为 value 的成员变量

c.元注解 -> @Documented:

  • 1.用于指定被该元 Annotation 修饰的 Annotation 类将被javadoc 工具提取成文档。默认情况下,javadoc是不包括注解的。
  • 2.定义为Documented的注解必须设置Retention值为RUNTIME。

d.元注解 -> @Inherited:

  • 1.被它修饰的 Annotation 将具有继承性。如果某个类使用了被@Inherited 修饰的 Annotation, 则其子类将自动具有该注解
    • 比如:如果把标有@Inherited注解的自定义的注解标注在类级别上,子类则可以继承父类类级别的注解
    • 实际应用中,使用较少

3.3.利用反射获取注解信息

  • 1.jdk 5.0 在 java.lang.reflect 包下新增了 AnnotatedElement 接口, 该接口代表程序中可以接受注解的程序元素
  • 2.当一个 Annotation 类型被定义为运行时 Annotation 后, 该注解才是运行时可见, 当 class 文件被载入时保存在 class 文件中的 Annotation 才会被虚拟机读取
  • 3.程序可以调用 AnnotatedElement对象如下方法来访问 Annotation 信息


3.4.jdk1.8中的注解的新特性:

  • 1.Java 8对注解处理提供了两点改进:可重复的注解类型注解
  • 2.反射也得到了加强,在Java8中能够得到方法参数的名称。这会简化标注在方法参数上的注解

a.可重复注解:

b.自定义注解实现可重复注解:




c.类型注解

  • jdk1.8之后,关于元注解@Target的参数类型ElementType枚举值多了两个TYPE_PARAMETER,TYPE_USE
    • 在Java 8之前,注解只能是在声明的地方所使用,Java8开始,注解可以应用在任何地方
    • ElementType.TYPE_PARAMETER :表示该注解能写在类型变量的声明语句中(如:泛型声明)
    • ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中
相关推荐
c++之路14 分钟前
C++20概述
java·开发语言·c++20
Championship.23.2419 分钟前
Linux Top 命令族深度解析与实战指南
java·linux·服务器·top·linux调试
橘子海全栈攻城狮33 分钟前
【最新源码】养老院系统管理A013
java·spring boot·后端·web安全·微信小程序
逻辑驱动的ken39 分钟前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
冷雨夜中漫步1 小时前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
直奔標竿1 小时前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
one_love_zfl2 小时前
java面试-微服务组件篇
java·微服务·面试
一只大袋鼠2 小时前
Java进阶:CGLIB动态代理解析
java·开发语言
环流_2 小时前
HTTP 协议的基本格式
java·网络协议·http
爱滑雪的码农2 小时前
Java基础十三:Java中的继承、重写(Override)与重载(Overload)详解
java·开发语言