JSR-250JavaEE规范
JCP(Java Community Process):Java 社区进程,是制定所有 Java 官方规范的权威组织(由 Oracle 主导,各大厂商 / 社区参与),简单说就是 “Java 规范的立法机构”;
JSR(Java Specification Request):Java 规范提案,是每个 Java 官方规范的唯一编号,所有 Java 的标准特性、规范都会先提交 JSR 提案,审核通过后成为正式规范,比如 JSR-250、JSR-330(依赖注入)、JSR-380(参数校验)等,简单说就是 “Java 规范的身份证号”;
JavaEE(Java Platform, Enterprise Edition):Java 企业版平台,是一套面向企业级开发的官方规范集合(不是具体框架,是标准),包含 Web 开发、依赖注入、事务、持久化等所有企业开发需要的规范,Spring、JBoss、Tomcat 等框架 / 容器都是JavaEE 规范的实现者,简单说就是 “Java 企业开发的总标准手册”。
三者的关系:JCP 组织通过JSR 提案的方式,制定并发布JavaEE 体系下的各个子规范,JSR-250 就是 JavaEE 体系中一个轻量级的通用注解子规范。
JSR-250
全称是Common Annotations for the Java Platform(Java平台的通用注解),是JCP组织制定的、隶属于JavaEE 5 及以上版本的官方规范,核心定位是:
为 Java 平台提供一套「轻量级、通用、跨组件」的基础注解标准,统一解决企业级开发中各类框架 / 容器都需要的「通用基础需求」,避免各个框架自己定义专属注解导致的代码耦合和跨框架兼容问题。
JSR-250核心定义了5个基础注解,所有注解都在javax.annotation包下。
@Resource
作用:定义通用的资源 / Bean 依赖注入标准,规范了 “名称优先、降级类型” 的注入规则
@PostConstruct
对象初始化后执行
作用:标注在无参、无返回值的方法上,规范了对象实例化完成、所有依赖注入完毕后,自动执行该方法;
使用场景:替代传统的构造器初始化(构造器中依赖还未注入,容易空指针),用于初始化资源(如加载配置、连接数据库、初始化缓存);
@Resource
private UserService userService;
// 依赖注入完成后自动执行,此时userService已注入
@PostConstruct
public void init() {
System.out.println("初始化:userService已注入");
// 加载配置、初始化资源等操作
}
@PreDestroy
作用:标注在无参、无返回值的方法上,规范了对象被容器销毁前,自动执行该方法;
使用场景:用于释放资源(如关闭数据库连接、清理缓存、关闭线程池);
注意: 仅在容器管理的对象上生效(如 Spring 的 Bean、Guice 的实例),手动 new 的对象不生效。
// 对象销毁前自动执行,释放资源
@PreDestroy
public void destroy() {
System.out.println("销毁:释放数据库连接");
// 释放资源的操作
}
@ResourceAdapter(资源适配器标注)
作用:标注在类上,用于关联 JavaEE 的资源适配器(Resource Adapter),主要用于企业级的资源集成(如对接消息中间件、外部系统);
使用场景:开发中极少用到,仅在大型企业级项目的资源集成场景使用。
@Generated(代码生成标注)
作用:标注在由工具自动生成的代码上(如 MyBatis 的 Mapper、JPA 的实体类),用于标识该代码是自动生成的,建议开发者不要手动修改;
使用场景:主要是代码生成工具使用,开发者几乎不用手动标注。
现状
JavaEE 已经改名为 Jakarta EE,JSR-250 规范也随之迁移,包名发生了变化。
旧版本框架(Spring Boot 2.x、JavaEE 8 及以下):使用 javax.annotation.Resource(原 JSR-250 包名)
新版本框架(Spring Boot 3.x、Jakarta EE 9 及以上):使用 jakarta.annotation.Resource(迁移后的包名)

浙公网安备 33010602011771号