Spring6+Java17下CommonAnnotationBeanPostProcessor创建失败求助
问题解决方案
核心原因
- 依赖缺失:
jakarta.annotation.Resource类属于Jakarta EE注解API,Spring的CommonAnnotationBeanPostProcessor需要这个类来处理@PostConstruct、@PreDestroy以及@Resource注解,你的项目中缺少对应的依赖包。 - Java 17的影响:Java 17作为模块化JDK,已完全移除原Java EE的
javax.annotation相关API(包括@PostConstruct、@PreDestroy),这些注解现在归属Jakarta EE规范,必须手动引入依赖才能使用。
具体解决步骤
1. 引入对应注解API依赖
- 若使用Spring 6.x及以上(适配Java 17的版本),在
pom.xml中添加:
<dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> <version>2.1.1</version> <!-- 可根据Spring版本选择兼容的版本 --> <scope>compile</scope> </dependency>
- 若使用Spring 5.x(兼容Java 17但最高官方支持Java 11),在
pom.xml中添加:
<dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> <scope>compile</scope> </dependency>
2. 确认版本兼容性
- Spring 6.x+:强制要求Java 17+,完全使用Jakarta EE API(包名从
javax改为jakarta)。 - Spring 5.x:在Java 17中使用时需额外引入
javax.annotation-api,可能存在少量兼容性警告,但核心功能正常。
3. 简化配置(可选)
无需手动定义CommonAnnotationBeanPostProcessor,可在lifeCycleBeanConfig.xml中添加<context:annotation-config/>标签,Spring会自动注册包括该处理器在内的各类注解处理器:
<context:annotation-config/>
内容的提问来源于stack exchange,提问作者S14321K
相关产品推荐
相关产品推荐

