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(默认)、prototype、request、session 等。 @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标记方法为异步执行(返回 void 或 Future/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 客户端接口(用于调用其他微服务) @LoadBalanced为 RestTemplate 或 WebClient 添加客户端负载均衡(配合 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,更灵活)。缓存策略 :生产环境建议明确指定 cacheNames 和 key,避免默认 key 导致冲突。Feign 客户端 :接口应独立定义,便于测试和复用,并配合 fallback 实现降级。