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使得注解的继承变得可能,这在某些特定场景下极其有用,例如在创建框架或者需要标记继承层级的应用中。

相关文章
|
2天前
|
消息中间件 存储 安全
RabbiMQ原理与SpringBoot使用
RabbiMQ原理与SpringBoot使用
40 0
|
2天前
|
XML 安全 IDE
springboot @RequiredArgsConstructor的概念与使用
【4月更文挑战第25天】在Spring Boot中,@RequiredArgsConstructor注解是Lombok库提供的功能,用于自动生成包含必需参数的构造函数。"必需参数"指的是那些被声明为final或者有@NonNull注解的成员变量。这种注解极大地简化了Java类的编写,尤其是在需要注入依赖或常量值时
35 3
|
2天前
|
XML 监控 Java
SpringBoot基础
SpringBoot基础
|
2天前
|
NoSQL Java 数据库连接
SpringBoot基础 (一)
1、配置文件 SpringBoot使用一个全局的配置文件,配置文件的名称是固定的 application.properties 语法结构:key=value application.yml 语法结构:key:(空格)value 配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了
|
2天前
|
监控 JavaScript Java
SpringBoot基础(二)
SpringBoot的监听机制其实是对Java提供的事件监听机制的封装 Java的事件监听机制中定义了以下几个角色: 事件(Event):继承Java.util.EventObject类的对象 事件源(Source):任意对象Object 监听器(Listener):实现java.util.EventListener接口的对象
|
9月前
|
运维 监控 前端开发
springboot基础
springboot基础
37 0
|
11月前
|
XML 开发框架 负载均衡
SpringBoot与SpringCloud的关系与区别
SpringBoot与SpringCloud的关系与区别
|
11月前
|
XML 监控 NoSQL
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
【SpringBoot学习笔记 一】SpringBoot基本概念和项目初始化
185 0
|
XML 运维 Java
浅谈SpringBoot的特性与实现
浅谈SpringBoot的特性与实现
|
SQL 存储 Java
SpringBoot基础学习文章
SpringBoot基础学习文章
165 0
SpringBoot基础学习文章