java注解能继承吗?可以的

注解继承

在 Java 中,注解(Annotation)默认是不具有继承性的,这意味着如果一个类或接口上使用了某个注解,其子类或实现类不会自动继承该注解。子类或实现类需要显式地重新声明该注解,如果希望它们也具有相同的注解效果。

例子:

java 复制代码
@MyAnnotation
public class ParentClass {
    // ...
}
java 复制代码
public class ChildClass extends ParentClass {
    // 子类不继承父类上的 @MyAnnotation 注解
}

在上面的示例中,ChildClass 并不继承 ParentClass 上的 @MyAnnotation 注解。如果希望 ChildClass 也具有相同的注解效果,需要在 ChildClass 上重新声明该注解:

java 复制代码
@MyAnnotation
public class ChildClass extends ParentClass {
    // 现在 ChildClass 上也具有 @MyAnnotation 注解
}

虽然 Java 注解默认不具有继承性,但可以通过自定义注解并使用元注解 @Inherited 来实现注解的继承性。使用 @Inherited 元注解的注解将会在子类上自动继承。

示例:

java 复制代码
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MyInheritedAnnotation {
    // ...
}

@MyInheritedAnnotation
public class ParentClass {
    // ...
}
java 复制代码
public class ChildClass extends ParentClass {
    // ChildClass 上会自动继承 @MyInheritedAnnotation 注解
}

需要注意的是,并不是所有的注解都支持继承性,只有在注解定义时使用 @Inherited 元注解并且应用到类或接口上时,才能使其具有继承性。

@Primary

@Primary 是 Spring Framework 中的一个注解,用于标识一个 Bean 定义为首选(Primary Bean)。当在多个候选 Bean 中存在相同类型的依赖项时,Spring 会优先选择被 @Primary 注解标记的 Bean,作为自动装配的首选项。

主要用途和作用:

解决自动装配的歧义性:当多个 Bean 类型与依赖项类型匹配时,Spring 容器会面临歧义性,无法确定应该注入哪个 Bean。使用 @Primary 注解可以明确指定某个 Bean 作为首选项,解决歧义性。

简化配置:通过将 @Primary 注解添加到某个 Bean,可以减少配置的复杂性,因为不再需要显式地指定要注入的 Bean。

示例:

java 复制代码
@Service
public class MyPrimaryService implements MyService {
    // ...
}

@Service
@Primary
public class MySecondaryService implements MyService {
    // ...
}

在上面的示例中,MyPrimaryService 和 MySecondaryService 都实现了 MyService 接口。如果有一个依赖需要注入 MyService 类型的 Bean,而且存在多个匹配的 Bean,Spring 将选择被 @Primary 注解标记的 MySecondaryService 作为首选项。

需要注意的是,@Primary 注解通常用于解决自动装配歧义,如果不需要解决歧义性问题,可以不使用该注解。当存在多个匹配的 Bean 时,Spring 可能会抛出 NoUniqueBeanDefinitionException 异常,这时可以考虑使用 @Primary 来解决。

相关推荐
唐青枫8 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马9 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261359 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户3721574261359 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜1 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫1 天前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq1 天前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev1 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮1 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js