深入浅出 java 注解-03-java 元注解 @Retention、@Documented、@Target、@Inherited、@Repeatable

本文主要是介绍深入浅出 java 注解-03-java 元注解 @Retention、@Documented、@Target、@Inherited、@Repeatable,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 目录
  • 元注解
  • @Retention
    • 实例
    • 说明
  • @Documented
    • 实例
  • @Target
    • 实例
    • 说明
  • @Inherited
    • 实例
    • 说明
  • @Repeatable
    • 实例
  • 代码地址
  • 系列导航

元注解

适用于其他注释的注释称为元注释。在 java.lang.annotation 中定义了几个元注释类型。

@Retention

指定标记的注解如何存储:

属性说明
RetentionPolicy.SOURCE标记的注释只保留在源层中,编译器将忽略它。
RetentionPolicy.CLASS编译器在编译时保留标记的注释,但是Java虚拟机(JVM)会忽略它。
RetentionPolicy.RUNTIME标记的注释由JVM保留,以便运行时环境可以使用它。

实例

@Retention(RetentionPolicy.RUNTIME)
public @interface MetadataDemo {
}

说明

  • RetentionPolicy.RUNTIME

运行时注解应该是使用最多的。

  • RetentionPolicy.SOURCE

一般用于编译时注解的定义,比如 lombok 相关的注解。

@Documented

@Documented 注解表明,无论何时使用指定的注释,都应该使用Javadoc工具对这些元素进行文档化。
(默认情况下,注释不包含在Javadoc中。)有关更多信息,请参见Javadoc工具页。

实例

@Retention(RetentionPolicy.CLASS)
@Documented
public @interface MetadataDemo {
}

@Target

@Target批注标记另一个批注,以限制批注可以应用于何种Java元素。目标注释指定以下元素类型之一作为其值:

属性说明
ElementType.ANNOTATION_TYPE应用于注解类型
ElementType.CONSTRUCTOR可以应用于构造函数
ElementType.FIELD可以应用于字段或属性。
ElementType.LOCAL_VARIABLE可以应用于一个局部变量
ElementType.METHOD可以应用于方法级注释
ElementType.PACKAGE应用于包声明
ElementType.PARAMETER应用于方法的参数
ElementType.TYPE应用于类的任何元素

实例

@Retention(RetentionPolicy.CLASS)
@Documented
@Target(ElementType.METHOD)
public @interface MetadataDemo {
}

说明

指定我们注解的应用范围非常重要。一般最常用的是 ElementType.TYPEElementType.METHOD

@Inherited

@Inherited 表明注解类型可以从超类继承。(这在默认情况下是不对的。)
当用户查询注释类型而该类没有对此类型的注释时,将查询类的超类以获取注释类型。此注释仅应用于类声明。

实例

@Retention(RetentionPolicy.CLASS)
@Documented
@Target(ElementType.METHOD)
@Inherited
public @interface MetadataDemo {
}

说明

当一个类继承了拥有此注解的类时,即使当前类没有任何注解。
只要父类的注解拥有(@Inherited)属性,则在子类中可以获取到此注解。

@Repeatable

在Java SE 8中引入的 @Repeatable 注解表明标记的注解可以多次应用于相同的声明或类型使用。
有关更多信息,请参见重复注释。

实例

  • Repeats.java
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Repeats {Repeat[] value();
}
  • Repeat.java
@Repeatable(value = Repeats.class)
public @interface Repeat {String value();
}
  • RepeatDemo.java
public class RepeatDemo {@Repeat(value = "tag")@Repeat(value = "tag2")public void method() {}}

代码地址

annotation metadata

系列导航

系列导航

这篇关于深入浅出 java 注解-03-java 元注解 @Retention、@Documented、@Target、@Inherited、@Repeatable的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259534

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定