Spring番外篇-SearchStrategy.INHERITED_ANNOTATIONS

本章单独针对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的注解×
获取接口上的注解××
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值