Spring番外篇-SearchStrategy.INHERITED_ANNOTATIONS

文章目录1. 如何使用jdk的api获取父类上的注解?2. 使用SearchStrategy.INHERITED_ANNOTATIONS获取父类上的注解3. SearchStrategy.INHERITED_ANNOTATIONS和Sear

文章目录

    • 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的区别

场景INHERITEDSUPERCLASS
获取父类有@Inherited的注解
获取父类无@Inherited的注解×
获取接口上的注解××

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754913222a5214791.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信