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也是同理,下次访问时会创建一个新的对象