JAVA常用的注解

前言

java研发,会大量使用到注解,自己也会通过@Interface编写一些权限拦截、日志拦截、方法特殊处理等注解。本文是JAVA、Spring、常用帮助类库、中间件等常用到并且有用的一些注解。

常用注解

下面以JAVA、Spring、辅助类库、常用中间件、测试相关等几个方面整理常用的注解。

JAVA

  • @Override

重写父类的方法

  • @Deprecated

标记该类或方法不再建议使用,一般用于类或方法升级后,老类和方法先保留,但标记不再推荐使用。

  • @SuppressWarnings

抑制类或方法内的警告

注解的value属性常用的包括:

all 禁止所有警告

rawtypes 不警告泛型中未使用原始类型相关的方法

unchecked 不警告List,ArrayList等未指定类型产生的警告信息

unused 不警告未调用到的代码

deprecation 不警告标记了不再建议使用的类或方法

  • @Transient

标记字段不需要被序列化

  • @Retention

修饰注解,是注解的注解,称为元注解。Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型, 这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE 按生命周期来划分可分为3类: 1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃; 2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期; 3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在; 这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。

  • @Target

用来表示注解作用范围,超过这个作用范围,编译的时候就会报错。比如:

@Target(ElementType.TYPE),注解只能用于接口、类、枚举、注解

@Target(ElementType.FIELD),注解只能用于字段、枚举的常量

@Target(ElementType.METHOD),注解只能用于方法

  • @Constraint

用于自定义约束注解。关键属性validatedBy:用于指定实现了ConstraintValidator接口的验证器类。该属性的值是一个Class对象数组,可以指定多个验证器类。

  • @Documented

使用@Documented注解修饰的注解将会被包含在javadoc命令生成的API文档中,文档中的类或方法将保留对应的注解。

  • @GroupSequence

自定义校验规则时,可以实现对实体类属性的分组校验。Spring注解@Validated的对象会按value值对应的分组校验

  • @Valid

用于要验证的对象或字段

  • @FunctionalInterface

申明某个接口是函数式接口,当你写的接口不符合函数式接口定义的时候,编译器会报错

  • @Resource

JSR-250规范的一个注解。Spring提供了对该注解的支持,默认情况下@Resource按照名称注入,无对应名称则按类型注入

  • @Inject

Spring提供对JSR-330标准注解(依赖注入)的支持,可以代替@Autowired使用,但@Inject没有required属性

SPRING

  • @Controller @Service @Repository @Configuration @Component

服务bean定义

  • @Order

Spring bean启动顺序,越小优先级越高

  • @Scope

  • @Autowired

  • @Inject

  • @Qualifier

  • @Bean

  • @MapperScan

  • @EnableTransactionManagement

  • 开启注解版事务功能

  • @Scheduled

定时执行某方法

  • @Profile

  • @ControllerAdvice

  • @ExceptionHandler

  • @Import

  • @Value

  • @Validated

可以分组验证对象字段

  • @ResponseBody

  • @RequestBody

  • @RequestMapping

  • @PostMapping

  • @GetMapping

  • @PathVariable

  • @RequestParam

  • @RestController

  • @WebFilter

  • @ComponentScan

  • @PropertySource

  • @Cachable

缓存方法调用结果

  • @CacheEvict

清除缓存

  • @Async

标记该方法用异步逻辑执行

  • @Aspect

类上标记后,表示当前是AOP类

  • @Pointcut

AOP拦截点

  • @Around

标记了Aspect类的方法标记Around后,环绕通知拦截点,既可以控制入参,还可以控制原方法的执行和返回值

  • @AfterReturning

AOP拦截点在返回后执行方法

  • @Transactional

  • @TransactionEventListener

  • @EventListner

  • @SpringBootApplication

  • @EnableAsync

  • @EnableCacheing

  • @EnabelAspectJAutoProxy

  • @EnableFeignClients

  • @EnableHystrix

  • @EnableConfigurationProperties

  • @EnableInvokeAutoConfiguration

  • @EnableScheduling

辅助类库

辅助类库包括lombak、MapStruct、Jackson等。

@Slf4j

注解在类上,通过Slf4j日志框架为类提供一个属性名为log的Logger的日志对象,具体日志实现类依赖项目配置的日志实现组件

  • @Data

  • @Getter,@Setter,@ToString,@EqualsAndHashCode

  • @AllArgsConstructor、@NoArgsConstructor

  • @NonNull

  • @Builder

  • @Accessors

  • @UtilityClass

Mapstruct:

  • @Mapper

  • @Mapping

Jackson:

  • @JacksonAnnotationsInside

  • @JsonSerialize

  • @JsonDeserialize

常用中间件

包括RPC、消息、调度、缓存、限流、熔断、DB等。

Dubbo:

  • @EnableDubbo

  • @com.alibaba.dubbo.config.annotation.Service.Service

  • @Reference

Kafka:

@KafkaListener

xxl-job:

@JobHandler

Hystrix:

@HystrixCommand

Sentinel:

@SentinelResource

Feign:

  • @FeignClient

ibatis:

  • @Mapper

  • @TableName

  • @TableId

  • @TableField

测试相关

以Junit为例。

  • @Test

  • @Ignore

  • @SpringBootTest

  • @BeforeTest

  • @AfterClass

  • @RunWith

  • @ContextConfiguration

spring注解,导入测试类的某些bean。和RunWith搭配使用

最后

文档将持续更新。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值