java - 类型级别的注释是否总是由该类型的公共方法继承?
问题描述
是否总是出现以下情况
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 {
}
方法会从周围的类/接口继承这个注解吗?
解决方案
除非解释注释的库明确决定将类型级别注释视为默认值(例如,Spring 的) ,否则它们永远不会是等价的。@Transactional
即便如此,类级别和方法级别注释的组合是否导致定义的组合(@RequestMapping
)或替换(@Transactional
)完全取决于库中编写的代码。
推荐阅读
- javascript - 检查一个数组是否包含 JavaScript 中另一个数组的 2 个或更多元素
- visual-studio-code - 我可以通过键盘快捷键绕过文件末尾换行符的 Visual Studio Code 设置吗?
- python - 返回空列表,追加不起作用
- google-sheets - 在 Google 表格中使用 QUERY 函数时出现问题
- python - dash-bootstrap-components 未正确显示 dbc.Col / dbc.Row
- python - 加速 PyQt def?
- javascript - SPA 访问新页面时如何删除URL中的#?
- google-chrome-extension - 我正在开发 chrome 扩展,它将捕获下载文件并检查它是否为 PDF,然后在自定义 PDF 查看器中打开它
- sql-server - TSQL:基于 varchar 值的动态透视不能正常工作
- apache-arrow - 如何根据箭头::StringArray 的内部数据构建一个arrow::LargeStringArray?