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 来解决。

相关推荐
秦禹辰几秒前
本地Docker部署开源Web相册图库Piwigo与在线远程访问实战方案
开发语言·后端·golang
the beard13 分钟前
深入理解Java多线程:状态、安全、同步与通信
java·开发语言
pengzhuofan25 分钟前
Java设计模式-享元模式
java·设计模式·享元模式
灵魂猎手30 分钟前
10. Mybatis XML配置到SQL的转换之旅
java·后端·源码
掉鱼的猫31 分钟前
10分钟带你体验 Solon 的状态机
java
皮皮林55135 分钟前
从一个程序员的角度告诉你:“12306”有多牛逼?
java
AAA修煤气灶刘哥35 分钟前
被参数校验 / 日志逼疯?AOP:1 个切入点,所有方法自动加 buff
java·后端·面试
金銀銅鐵38 分钟前
[Java] functional interface 分类
java
AAA修煤气灶刘哥41 分钟前
ThreadLocal:后端仔的「线程私藏小仓库」,再也不用到处传 userId 啦!
java·后端·面试
lucky_lyovo1 小时前
大模型部署
开发语言·人工智能·云计算·lua