类型级别的注释是否总是由该类型的 public 方法继承?

Is a type-level annotation always inherited by public methods of that type?

下面是不是总是这样

public interface Foo {

  @MyCustomAnnotation
  void bar();

  @MyCustomAnnotation
  void bar2();
}

相当于

@MyCustomAnnotation
public interface Foo {
    
  void bar();

  void bar2();
}

还是取决于注解的定义方式?换句话说,class/interface-level 注释是否总是由该类型的方法继承(只要该方法未同时标记此注释)?

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

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

方法会从周围的注解继承这个注解吗class/interface?

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