首页 > 解决方案 > 类型级别的注释是否总是由该类型的公共方法继承?

问题描述

是否总是出现以下情况

public interface Foo {

  @MyCustomAnnotation
  void bar();

  @MyCustomAnnotation
  void bar2();
}

相当于

@MyCustomAnnotation
public interface Foo {
    
  void bar();

  void bar2();
}

还是取决于注释的定义方式?换句话说,类/接口级别的注释是否总是由该类型的方法继承(只要该方法也没有用这个注释标记)?

具体来说,如果我将上面的注释定义为

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
}

方法会从周围的类/接口继承这个注解吗?

标签: javaannotations

解决方案


除非解释注释的库明确决定将类型级别注释视为默认值(例如,Spring 的) ,否则它们永远不会是等价的。@Transactional即便如此,类级别和方法级别注释的组合是否导致定义的组合(@RequestMapping)或替换(@Transactional)完全取决于库中编写的代码。


推荐阅读