You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

极简Java EE 7项目依赖注入失败,@Inject注入字段为null如何解决?

问题根源

Apache Tomcat 9 属于轻量化Servlet容器,并未内置完整Java EE规范要求的CDI(上下文与依赖注入)实现能力,@Inject是CDI规范提供的注解,Tomcat默认无法识别并处理该注解的注入逻辑,因此会出现注入对象为null的情况。

解决方案

你可以从两种路径中选择符合需求的方案处理:

方案1:切换为支持完整Java EE的容器

直接使用原生支持CDI的企业级容器,无需修改现有代码即可正常运行,可选容器包括:

  • Apache TomEE(Tomcat的Java EE增强版本,适配成本最低)
  • WildFly
  • GlassFish
  • Payara

方案2:为现有Tomcat 9添加CDI支持

如果必须使用Tomcat 9,可手动集成CDI实现(以官方推荐的Weld实现为例):

  1. 导入Weld Servlet依赖
    如果使用Maven,在pom.xml中添加如下依赖:
<dependency>
    <groupId>org.jboss.weld.servlet</groupId>
    <artifactId>weld-servlet-core</artifactId>
    <version>3.1.9.Final</version>
</dependency>

如果手动导包,将对应版本的Weld Servlet相关jar包放入项目WEB-INF/lib目录即可。
2. 添加CDI配置文件
在项目WEB-INF目录下新建beans.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
       bean-discovery-mode="all">
</beans>
  1. 验证注解包导入正确性
    确认@ApplicationScoped注解导入的包为javax.enterprise.context.ApplicationScoped,不要误导入Spring框架等其他框架的同名注解。

完成上述配置后重新部署项目,@Inject注解即可正常完成注入。


内容的提问来源于stack exchange,提问作者coderodde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:15:00