Springboot常用注解之@Inherited和@interface

编程知识 更新时间:2023-04-07 15:23:43

1. @Inherited:允许子类继承父类的注解,仅限于类注解有用,对于方法和属性无效。 

   测试元注解

   1.1 包含@Inherited注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface InheritedTrue {
    String value();
}

  1.2 不包含@Inherited注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface InheritedFalse {
    String value();
}

1.3 测试父类

@InheritedTrue("InheritedTrue class")
@InheritedFalse("InheritedFalse class")
public class InheritedParent {

    @InheritedTrue("InheritedTrue method")
    @InheritedFalse("InheritedFalse method")
    public void methodTest(){ }

    @InheritedTrue("InheritedTrue no override method")
    @InheritedFalse("InheritedFalse no override method")
    public void methodInherttTest(){ }

    @InheritedTrue("InheritedTrue field")
    @InheritedFalse("InheritedFalse field")
    public String stringTest;
}

   1.4 测试子类

public class InheritedChild extends InheritedParent{

    @Override
    public void methodTest(){}
}

  1.5  单元测试父类

@RunWith(SpringRunner.class)
@SpringBootTest
public class WalletTests {

    private Logger logger = LoggerFactory.getLogger(WalletTests.class);

    @Before
    public void init() {
        logger.info("开始测试-----------------");
    }

    @After
    public void after() {
        logger.info("测试结束-----------------");
    }
}

 1.6 单元测试

public class InheritedTest extends WalletTests {

    private Logger logger = LoggerFactory.getLogger(InheritedTest.class);

     @Test
     public void InheritTest() throws NoSuchMethodException, NoSuchFieldException {
         Class<InheritedChild> child = InheritedChild.class;
         logger.info("对类进行测试");
         if(child.isAnnotationPresent(InheritedTrue.class)){
             logger.info(child.getAnnotation(InheritedTrue.class).value());
         }
         if(child.isAnnotationPresent(InheritedFalse.class)){
             logger.info(child.getAnnotation(InheritedFalse.class).value());
         }

         logger.info("对重写方法进行测试");
         Method method = child.getMethod("methodTest", null);
         if(method.isAnnotationPresent(InheritedTrue.class)){
             logger.info(method.getAnnotation(InheritedTrue.class).value());
         }
         if(method.isAnnotationPresent(InheritedFalse.class)){
             logger.info(method.getAnnotation(InheritedFalse.class).value());
         }

         logger.info("对继承方法进行测试");
         Method methodInherit = child.getMethod("methodInherttTest", null);
         if(methodInherit.isAnnotationPresent(InheritedTrue.class)){
             logger.info(methodInherit.getAnnotation(InheritedTrue.class).value());
         }
         if(methodInherit.isAnnotationPresent(InheritedFalse.class)){
             logger.info(methodInherit.getAnnotation(InheritedFalse.class).value());
         }

         logger.info("对属性进行测试");
         Field field = child.getField("stringTest");
         if(field.isAnnotationPresent(InheritedTrue.class)){
             logger.info(field.getAnnotation(InheritedTrue.class).value());
         }
         if(field.isAnnotationPresent(InheritedFalse.class)){
             logger.info(field.getAnnotation(InheritedFalse.class).value());
         }
     }
}

1.7 测试结果

     可以看出只对类的继承有用,对于方法的重写和继承以及属性无效。

 

 2.@Interface

    自定义注释类型。java用  @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface InterfaceTest {
    String value() default "InterfaceTest";
}

    

 

更多推荐

Springboot常用注解之@Inherited和@interface

本文发布于:2023-04-07 15:23:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/7236464e089099064dae953978e6a1e2.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:注解   常用   Springboot   Inherited   interface

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 53723文章数
  • 14阅读数
  • 0评论数