什么是类型级注解?关于@TestInstance注解的技术问询
什么是类型级注解?
类型级注解是直接作用在Java类型本身上的注解——这里的类型指类、接口、枚举、注解类型(元注解)这类顶层或嵌套的类型元素,而非类内部的方法、字段、构造器等成员。
就拿你提到的@TestInstance举例,它就是标准的类型级注解:你只能把它标注在测试类上,用来控制JUnit 5中测试类实例的生命周期(比如是每个测试方法新建一个实例,还是整个测试类共用同一个实例)。看个实际代码示例:
@TestInstance(TestInstance.Lifecycle.PER_CLASS) public class UserServiceTest { // 测试方法、成员字段等 }
这里@TestInstance直接标注在UserServiceTest这个类类型上,而非某个方法或字段,这就是类型级注解的典型使用场景。
与之相对的是成员级注解,比如JUnit的@Test只能标注在方法上,Spring的@Autowired可标注在字段、构造器或方法上——这些都是作用在类型成员上的注解,不属于类型级范畴。
快速判断方法:看注解的@Target元注解是否包含TYPE枚举值。@Target(TYPE)就表示该注解只能作用在类型本身上,@TestInstance的定义里必然包含这个配置,所以它是类型级注解。
内容的提问来源于stack exchange,提问作者Palak Kharbanda
相关产品推荐
相关产品推荐

