Annotation 中文译过来就是注解、标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解。这里总结记录最全最详细注解。
不断更新中…

  • 注解不支持继承

1. @Test

  • @Test注解后,在运行该方法时,测试框架会自动识别该方法并单独调用,@Test实际上是一种标记注解,起标记作用,运行时告诉测试框架该方法为测试方法。
  • Test注解是如何声明的:
//声明Test注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {

}

@Target和@Retention是由Java提供的元注解

@interface声明了Test注解
@Target 用来约束注解可以应用的地方(如方法、类或字段)。传入ElementType.METHOD参数来标明@Test只能用于方法上,
@Retention 约束注解的生命周期 (RetentionPolicy.RUNTIME)则用来表示该注解生存期是运行时。
源码级别(source),类文件级别(class)或者运行时级别(runtime)

2. @Deprecated

  • Java本身内置的注解,当方法或是类上面有@Deprecated注解时,说明该方法或是类都已经过期不建议再用

3. @SuppressWarnings

  • Java本身内置的注解,表示忽略指定警告
1. @SuppressWarnings("unchecked")  [抑制单类型的警告]
2. @SuppressWarnings("unchecked","rawtypes")  [抑制多类型的警告]
3. @SuppressWarnings("all")  [ 抑制所有类型的警告]
@SuppressWarnings({"unchecked", "deprecated"})
deprecation 告诉编译器忽略过时的方法或类型检查。
unchecked 告诉编译器忽略原始类型检查

4. @Override

-用于标明此方法覆盖了父类的方法

5. @Documented

  • java提供的元注解,@Documented 被修饰的注解会生成到javadoc中

6. @Inherited

  • java提供的元注解,可以让注解被继承,但这并不是真的继承,只是通过使用@Inherited,可以让子类Class对象使用getAnnotations()获取父类被@Inherited修饰的注解,如下:

7. @ApiModelProperty()

  • 在swagger中@ApiModelProperty()注解一般用于方法,属性的说明
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明
hidden–隐藏
@Data
public class Param {
@ApiModelProperty(“索引”)
private String index;
@ApiModelProperty(“类型”)
private String type;
@ApiModelProperty(“id”)
private String id;
}

8. @Data

  • @Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法
  • @Getter/@Setter : 注解在类上, 为类提供读写属性
  • @ToString : 注解在类上, 为类提供 toString() 方法
  • @Slf4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象
  • @Log4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象

9. @Builder

  • 单独使用@Builder注解,发现生成了全属性的构造方法
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class HelloRespDTO {

    private String message;

}

10. @Resource和@Autowired

  • 都是用来实现依赖注入的,@AutoWried按by type自动注入,而@Resource默认按byName自动注入。

11. @Configuration

  • Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
  • @Configuration不可以是final类型; @Configuration不可以是匿名类;嵌套的configuration必须是静态类。

12. @Component和@Configuration

  • 使用Configuration时在driver和spring容器之中的是同一个对象,而使用Component时是不同的对象。
    造成不同结果的原因在ConfigurationClassPostProcessor类之中,通过调用enhanceConfigurationClasses方法,为被注解@Configuration的类进行CGLIB代理
  • @Configuration 中所有带 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例

13. @Bean

  • @Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。

14. RestControllerAdvice

  • RestControllerAdvice和ControllerAdvice是全局接口异常处理的类,当发生异常没有捕获时,便会触发这个异常,一般用法如下

15. @RefreshScope

  • 在使用SpringCloud的高可用配置中心的时候,发现了这个@RefreshScope的注解
  • 所有@RefreshScope的Bean都是延迟加载的,只有在第一次访问时才会初始化
  • 刷新Bean也是同理,下次访问时会创建一个新的对象