admin管理员组文章数量:1130349
文章目录
- 1. 如何使用jdk的api获取父类上的注解?
- 2. 使用SearchStrategy.INHERITED_ANNOTATIONS获取父类上的注解
- 3. SearchStrategy.INHERITED_ANNOTATIONS和SearchStrategy.SUPERCLASS的区别
本章单独针对MergedAnnotations.SearchStrategy#INHERITED_ANNOTATIONS做补充
MergedAnnotations文章链接
1. 如何使用jdk的api获取父类上的注解?
其实jdk是可以获取父类上的注解的,但是有一个条件,那就是作用于父类上的注解必须使用@Inherited标识
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface NoneInheritedAnno {
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface InheritedAnno {
}
@InheritedAnno
@NoneInheritedAnno
class InheritedClass1 {
}
class InheritedSubClass1 extends InheritedClass1 {
}
@Test
public void jdk_inherited() throws Exception {
// 1. 子类无法获取@NoneInheritedAnno
assertNull(InheritedSubClass1.class.getAnnotation(NoneInheritedAnno.class));
// 2. 子类可以获取@InheritedAnno
assertNotNull(InheritedSubClass1.class.getAnnotation(InheritedAnno.class));
}
2. 使用SearchStrategy.INHERITED_ANNOTATIONS获取父类上的注解
@Test
public void spring_inherited() throws Exception {
assertFalse(
MergedAnnotations.from(InheritedSubClass1.class, SearchStrategy.INHERITED_ANNOTATIONS)
.isPresent(NoneInheritedAnno.class)
);
assertTrue(
MergedAnnotations.from(InheritedSubClass1.class, SearchStrategy.INHERITED_ANNOTATIONS)
.isPresent(InheritedAnno.class)
);
}
3. SearchStrategy.INHERITED_ANNOTATIONS和SearchStrategy.SUPERCLASS的区别
| 场景 | INHERITED | SUPERCLASS |
|---|---|---|
获取父类有@Inherited的注解 | √ | √ |
获取父类无@Inherited的注解 | × | √ |
| 获取接口上的注解 | × | × |
文章目录
- 1. 如何使用jdk的api获取父类上的注解?
- 2. 使用SearchStrategy.INHERITED_ANNOTATIONS获取父类上的注解
- 3. SearchStrategy.INHERITED_ANNOTATIONS和SearchStrategy.SUPERCLASS的区别
本章单独针对MergedAnnotations.SearchStrategy#INHERITED_ANNOTATIONS做补充
MergedAnnotations文章链接
1. 如何使用jdk的api获取父类上的注解?
其实jdk是可以获取父类上的注解的,但是有一个条件,那就是作用于父类上的注解必须使用@Inherited标识
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface NoneInheritedAnno {
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface InheritedAnno {
}
@InheritedAnno
@NoneInheritedAnno
class InheritedClass1 {
}
class InheritedSubClass1 extends InheritedClass1 {
}
@Test
public void jdk_inherited() throws Exception {
// 1. 子类无法获取@NoneInheritedAnno
assertNull(InheritedSubClass1.class.getAnnotation(NoneInheritedAnno.class));
// 2. 子类可以获取@InheritedAnno
assertNotNull(InheritedSubClass1.class.getAnnotation(InheritedAnno.class));
}
2. 使用SearchStrategy.INHERITED_ANNOTATIONS获取父类上的注解
@Test
public void spring_inherited() throws Exception {
assertFalse(
MergedAnnotations.from(InheritedSubClass1.class, SearchStrategy.INHERITED_ANNOTATIONS)
.isPresent(NoneInheritedAnno.class)
);
assertTrue(
MergedAnnotations.from(InheritedSubClass1.class, SearchStrategy.INHERITED_ANNOTATIONS)
.isPresent(InheritedAnno.class)
);
}
3. SearchStrategy.INHERITED_ANNOTATIONS和SearchStrategy.SUPERCLASS的区别
| 场景 | INHERITED | SUPERCLASS |
|---|---|---|
获取父类有@Inherited的注解 | √ | √ |
获取父类无@Inherited的注解 | × | √ |
| 获取接口上的注解 | × | × |
本文标签: 番外篇SpringINHERITEDANNOTATIONSSearchStrategy
版权声明:本文标题:Spring番外篇-SearchStrategy.INHERITED_ANNOTATIONS 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1754913223a2741136.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论