前言
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搭配使用
最后
文档将持续更新。