springboot @Inherited的概念与使用

简介: 【4月更文挑战第25天】在Spring Boot中,@Inherited是Java提供的一个注解,用于指示某个注解类型可以从超类继承到子类。当一个使用了@Inherited标记的注解被用在一个类上时,这个注解会被其所有的子类继承,除非子类自己也通过相同的注解进行了声明。

在Spring Boot中,@Inherited是Java提供的一个注解,用于指示某个注解类型可以从超类继承到子类。当一个使用了@Inherited标记的注解被用在一个类上时,这个注解会被其所有的子类继承,除非子类自己也通过相同的注解进行了声明。

概念

@Inherited是一个元注解,它只能用于修饰另一个注解定义。在默认情况下,注解不会从一个类自动继承到其子类。但是,如果一个注解被@Inherited标记,那么当一个类使用了这种注解时,其子类也将隐式地拥有这个注解。

使用场景

这个特性通常用于设计一些需要从基类自动传递到子类的行为的注解。例如,在创建一个有继承关系的组件时,可能希望某些特性或者配置能自动应用于所有的派生类。

示例

假设我们有一个自定义注解@MyCustomAnnotation,希望这个注解在类的继承结构中自动传递。首先定义这个注解并使用@Inherited进行标记:

java复制代码

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Inherited;

@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
    String value();
}

然后,将这个注解应用于一个基类:

java复制代码

@MyCustomAnnotation(value = "Base Class")
public class BaseClass {
}

public class DerivedClass extends BaseClass {
}

在这种情况下,尽管DerivedClass没有显式地使用@MyCustomAnnotation注解,但由于@Inherited的存在,DerivedClass也会继承BaseClass的注解。如果你在运行时检查DerivedClass的注解,你会发现它继承了MyCustomAnnotation

  • 注解仅在类继承中有效@Inherited仅使得注解在类的继承关系中可继承。它不适用于接口继承或方法注解。
  • 被子类覆盖:如果子类定义了同一个注解,子类的注解定义将覆盖父类的注解定义。
  • 用途限制:由于这种继承是隐式的,使用@Inherited时应清楚其潜在影响,避免在不适当的场合使用可能导致混淆的继承行为。

@Inherited提供了一种方便的方式来确保某些配置或行为在类的整个继承层次中保持一致,这在创建具有继承结构的复杂应用时特别有用。


注意点

  • @Inherited只对类注解有效,不适用于接口、方法或字段。
  • 如果子类有同样的注解定义,那么子类的注解会覆盖从基类继承的注解。
  • @Inherited不影响接口继承。

总的来说,@Inherited使得注解的继承变得可能,这在某些特定场景下极其有用,例如在创建框架或者需要标记继承层级的应用中。

相关文章
|
7月前
|
消息中间件 存储 安全
RabbiMQ原理与SpringBoot使用
RabbiMQ原理与SpringBoot使用
58 0
|
7月前
|
开发框架 Java Maven
SpringBoot-Starter 概念与实战
【4月更文挑战第30天】Spring Boot 是一个基于 Spring Framework 的开发框架,旨在简化 Spring 应用程序的搭建和开发。Spring Boot 提供了大量的 Starter(启动器)来简化项目的依赖管理和配置,其中最为常见的是 SpringBoot-Starter。
179 1
|
7月前
|
前端开发 NoSQL Java
Springboot入门篇-springboot需要了解的核心概念
该内容是关于Spring Boot、Spring MVC和Spring的对比以及Spring Boot的核心特性。Spring Boot不是为了替代Spring和Spring MVC,而是简化其使用,通过自动配置和starters减少冗余配置。Spring Boot Starter是一组预配置的依赖集合,帮助开发者快速搭建应用。Spring Boot Starter Parent提供了统一的依赖管理和版本控制。此外,Spring Boot支持嵌入式web容器,如Tomcat,方便微服务部署。Spring Data提供了简化数据库交互的API,包括对JPA和MongoDB的支持。
46 0
|
7月前
|
安全 Java 数据安全/隐私保护
springboot @EnableResourceServer的概念与作用
【4月更文挑战第26天】在 Spring Boot 和 Spring Security OAuth2 框架中,@EnableResourceServer 注解用于启用一个资源服务器,这是在使用 OAuth2 保护资源时的关键组成部分。该注解主要用于应用程序中,它承担了处理来自其他服务(通常是 OAuth2 客户端)的受保护资源请求的角色
570 0
|
7月前
|
存储 Java 数据库连接
springboot ConstraintValidator的概念与用法
【4月更文挑战第25天】在 Java 中,ConstraintValidator 是用于自定义注解验证的接口,属于 Bean Validation(JSR 303 和 JSR 349)标准的一部分。这个接口定义了如何实施一个特定的约束注解的验证逻辑。
245 0
|
7月前
|
消息中间件 缓存 Java
SpringBoot的架构学习之路
SpringBoot的架构学习之路
|
7月前
|
NoSQL Java 数据库连接
SpringBoot基础 (一)
1、配置文件 SpringBoot使用一个全局的配置文件,配置文件的名称是固定的 application.properties 语法结构:key=value application.yml 语法结构:key:(空格)value 配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了
|
Java 应用服务中间件 Maven
从零玩转之SpringBoot3-核心原理1
从零玩转之SpringBoot3-核心原理
333 0
|
设计模式 Java 机器人
从零玩转之SpringBoot3-核心原理2
从零玩转之SpringBoot3-核心原理
260 0
|
XML 监控 NoSQL
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
285 0