Java 及 Spring 生态中常用注解的分类整理

Java 及 Spring 生态中常用注解的分类整理,涵盖 Spring Framework、Spring MVC、Spring Boot、Spring Cloud、Spring Security、Spring Cache 以及 Jackson 等核心模块。每个注解均附有简明中文说明,便于理解与实际开发使用。


Java 元注解(用于定义注解的注解)
注解作用
@Target指定注解可以应用的程序元素类型(如 TYPE, METHOD, FIELD 等)。
@Retention指定注解的保留策略(SOURCE, CLASS, RUNTIME)。
@Documented表示该注解应该被 javadoc 工具记录。
@Inherited表示注解类型可以被自动继承。
@Repeatable表示注解可以在同一个声明上多次使用。
JSR-250 常用注解(javax.annotation / jakarta.annotation)
注解作用
@Resource按名称进行依赖注入。可以指定 name 属性来精确注入特定的 Bean。
@PostConstruct标记一个方法,在 Bean 初始化完成后执行,用于初始化逻辑。
@PreDestroy标记一个方法,在 Bean 被容器销毁之前执行,用于清理逻辑。

Bean Validation 注解分类表(JSR-303 + JSR-380)

JSR-380 随 Java EE 8 发布,主要为了支持 Java 8+ 的新特性,如日期时间 API、Optional 类型等。

空值和存在性验证
注解版本作用
@NullJSR-303元素必须为 null
@NotNullJSR-303元素必须不为 null
@NotEmptyJSR-380元素不能为 null 且不能为空
@NotBlankJSR-303字符串不能为 null 且至少一个非空白字符
数值范围验证
注解版本作用
@MinJSR-303数字必须 ≥ 指定最小值
@MaxJSR-303数字必须 ≤ 指定最大值
@DecimalMinJSR-303数字必须 ≥ 指定小数值
@DecimalMaxJSR-303数字必须 ≤ 指定小数值
@PositiveJSR-380数字必须 > 0
@PositiveOrZeroJSR-380数字必须 ≥ 0
@NegativeJSR-380数字必须 < 0
@NegativeOrZeroJSR-380数字必须 ≤ 0
@DigitsJSR-303数字的整数和小数位必须符合指定位数
@RangeHibernate结合 @Min 和 @Max
大小和长度验证
注解版本作用
@SizeJSR-303元素大小在指定范围内
@LengthHibernate专门用于字符串长度验证
格式和模式验证
注解版本作用
@PatternJSR-303字符串必须匹配正则表达式
@EmailJSR-380增强的电子邮件格式验证
@URLHibernate验证有效的 URL 格式
日期时间验证
注解版本作用
@PastJSR-303日期必须是过去
@PastOrPresentJSR-380日期必须是过去或现在
@FutureJSR-303日期必须是将来
@FutureOrPresentJSR-380日期必须是将来或现在
布尔逻辑验证
注解版本作用
@AssertTrueJSR-303元素必须为 true
@AssertFalseJSR-303元素必须为 false

Hibernate Validator 特有扩展
注解作用
@Range(min=, max=)结合了 @Min@Max,验证数值范围
@UniqueElements验证集合中的所有元素都是唯一的
@DurationMin / @DurationMax验证 Duration 对象的时间范围
@CreditCardNumber验证信用卡号码格式

Java 语言基础注解
注解作用
@Override表示一个方法声明打算重写超类中的方法声明。
@Deprecated表示某个程序元素(类、方法等)已过时,不推荐使用。
@SuppressWarnings抑制编译器警告。
@FunctionalInterface表示一个接口是函数式接口(只有一个抽象方法)。

一、Spring 核心(IoC / DI)

注解作用说明
@Component通用组件注解,标记类为 Spring 管理的 Bean
@Service业务逻辑层组件,是 @Component 的特化
@Repository数据访问层组件(DAO),是 @Component 的特化,可自动翻译数据库异常
@Controller控制器层组件(MVC),是 @Component 的特化
@Configuration标记类为配置类,替代 XML 配置,内部可定义 @Bean 方法
@Bean@Configuration 类中声明一个 Bean
@Autowired自动装配依赖(按类型),可作用于字段、构造器、方法
@Qualifier@Autowired 配合使用,按名称指定注入的 Bean
@Primary当存在多个候选 Bean 时,优先使用被此注解标记的 Bean
@Value注入配置属性值(如 ${property} 或字面量)
@Profile指定 Bean 在特定 Profile 下生效(如 @Profile("dev")
@Scope指定 Bean 的作用域,如 singleton(默认)、prototyperequestsession 等。
@Lazy延迟初始化 Bean,只有在第一次被使用时才会创建。
@Import在配置类上使用,用于导入一个或多个配置类(被 @Configuration 注解的类)。
@PropertySource加载自定义 properties 文件(如 @PropertySource("classpath:app.properties"))。
@ImportResource导入传统 XML 配置文件(如 @ImportResource("classpath:beans.xml"))。
@ComponentScan在配置类上使用,告诉 Spring 在哪些包下扫描被 @Component 及其衍生注解标记的类。
@EventListener监听 Spring 应用事件(如自定义事件或内置事件如 ContextRefreshedEvent)。
@EnableScheduling启用定时任务支持。
@Scheduled定义定时执行的方法(支持 cron 表达式、fixedRate、fixedDelay 等)。
@EnableAsync启用 Spring 异步方法执行能力(需配合配置类)。
@Async标记方法为异步执行(返回 voidFuture/CompletableFuture)。
@EnableTransactionManagement启用基于注解的事务管理(通常在配置类上,Spring Boot 中自动启用)。
@Transactional声明式事务管理,可作用于类或方法,控制事务的传播行为、隔离级别、回滚规则等。
@EnableAspectJAutoProxy启用 AspectJ 自动代理(Spring Boot 中通常自动启用)。
@Aspect标记一个类为切面。
@Before / @After / @AfterReturning / @AfterThrowing / @Around定义通知(Advice)类型。
@Order定义 Bean 或切面的执行顺序(值越小优先级越高)。

2. Spring MVC 注解

二、Spring MVC(Web 层)

注解作用说明
@RestController@Controller + @ResponseBody 的组合,用于构建 RESTful API
@RequestMapping将 HTTP 请求映射到 MVC 控制器的方法上。可以指定 URL、HTTP 方法、请求参数等。
@GetMapping@RequestMapping(method = RequestMethod.GET) 的简写。
@PostMapping@RequestMapping(method = RequestMethod.POST) 的简写。
@PutMapping@RequestMapping(method = RequestMethod.PUT) 的简写。
@DeleteMapping@RequestMapping(method = RequestMethod.DELETE) 的简写。
@PatchMapping@RequestMapping(method = RequestMethod.PATCH) 的简写。
@ResponseBody将方法返回值直接写入 HTTP 响应体(通常配合 JSON)
@RequestBody将 HTTP 请求体反序列化为 Java 对象(如 JSON → POJO)
@PathVariable绑定 URL 路径中的变量(如 /user/{id} 中的 id
@RequestParam绑定请求参数(如 ?name=xxx 中的 name
@RequestHeader绑定 HTTP 请求头字段
@CookieValue绑定 Cookie 值
@SessionAttribute将 Session 中的属性绑定到方法参数上。
@ModelAttribute绑定请求参数到模型对象,或在方法中预填充模型
@RestControllerAdvice定义一个全局的、组件化的异常处理类,可以结合 @ExceptionHandler 使用。
@ExceptionHandler@Controller@ControllerAdvice 类中声明异常处理方法,用于处理特定异常。
@Valid / @Validated用于触发方法参数(通常是 @RequestBody)的 JSR-303 Bean 验证。@Validated 是 Spring 的变体,支持验证分组。
@CrossOrigin启用跨域请求支持,可以用在控制器类或方法上。

3. Spring Boot 注解

三、Spring Boot

注解作用说明
@SpringBootApplication启动类注解,等价于 @Configuration + @EnableAutoConfiguration + @ComponentScan
@EnableAutoConfiguration启用 Spring Boot 自动配置机制
@ConditionalOnClass条件化配置,当类路径下存在指定的类时,才生效。
@ConditionalOnProperty条件化配置,当指定的配置属性具有特定值时,才生效。
@ConditionalOnMissingBean条件化配置,当容器中不存在指定类型的 Bean 时,才生效。
@ConfigurationProperties将外部配置文件(如 application.properties)中的属性绑定到一个 Java Bean 上。
@NestedConfigurationProperty标记嵌套配置类,生成元数据供 IDE 使用,搭配 @ConfigurationProperties 一起使用
@EnableConfigurationProperties启用对 @ConfigurationProperties 注解 Bean 的支持。

4. Spring Cloud 注解

四、Spring Cloud(微服务)

注:以下注解多用于 Spring Cloud Netflix / Alibaba 等实现

注解作用说明
@EnableDiscoveryClient启用服务注册与发现(兼容多种注册中心)
@EnableFeignClients启用 Feign 声明式 HTTP 客户端
@FeignClient声明一个 Feign 客户端接口(用于调用其他微服务)
@LoadBalancedRestTemplateWebClient 添加客户端负载均衡(配合 Ribbon/Nacos)
@RefreshScope配合 Spring Cloud Config,支持运行时刷新配置

五、Spring Security

注解作用说明
@EnableWebSecurity启用 Web 安全配置(通常用于 WebSecurityConfigurerAdapter 子类)
@EnableMethodSecurity启用方法级安全(Spring Security 5.6+ 推荐替代 @EnableGlobalMethodSecurity
@PreAuthorize("hasRole('ADMIN')")方法调用前进行权限校验(支持 SpEL 表达式)
@PostAuthorize方法调用后进行权限校验
@Secured({"ROLE_ADMIN"})基于角色的简单方法安全控制
@AuthenticationPrincipal注入当前认证用户对象(如 UserDetails

六、Spring Cache(缓存)

注解作用说明
@EnableCaching启用缓存支持(通常在配置类上)
@CacheConfig在类级别共享缓存的公共配置(如缓存名称)。
@Cacheable("users")方法结果可缓存;若缓存存在则直接返回,不执行方法
@CachePut("users")总是执行方法,并将结果更新到缓存
@CacheEvict("users")清除缓存(可指定 allEntries = true 清空整个缓存)
@Caching组合多个缓存操作(如同时 @CachePut@CacheEvict

7. Jackson 注解

七、Jackson(JSON 序列化/反序列化)

用于控制 POJO 与 JSON 之间的转换行为

注解作用说明
@JsonIgnore在字段或Getter方法上使用,忽略该属性(序列化和反序列化时都不处理)。
@JsonProperty指定 Java 属性在 JSON 中的字段名。
@JsonFormat指定日期、时间等类型的序列化格式。例如 @JsonFormat(pattern = "yyyy-MM-dd")
@JsonInclude控制序列化时何时包含某个属性。例如 @JsonInclude(JsonInclude.Include.NON_NULL) 表示属性为 null 时不序列化。
@JsonSerialize指定一个自定义的序列化器用于该属性。
@JsonDeserialize指定一个自定义的反序列化器用于该属性。
@JsonPropertyOrder指定属性在 JSON 中输出的顺序。
@JsonUnwrapped将一个对象的属性平铺(展开)到其父对象的 JSON 表示中。

补充建议(企业级开发实践)

  • 统一异常处理:配合 @RestControllerAdvice + @ExceptionHandler
  • 配置绑定:优先使用 @ConfigurationProperties 而非 @Value,便于类型安全和校验。
  • 安全控制:方法级权限推荐使用 @PreAuthorize(支持 SpEL,更灵活)。
  • 缓存策略:生产环境建议明确指定 cacheNameskey,避免默认 key 导致冲突。
  • Feign 客户端:接口应独立定义,便于测试和复用,并配合 fallback 实现降级。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值