【问题标题】:Java EE RESTful Service field InjectionJava EE RESTful 服务字段注入
【发布时间】:2015-03-08 22:28:44
【问题描述】:

我在 Wildfly 中部署应用程序时遇到问题,该应用程序包含使用 @Inject 注入 DAO 的 RESTful 服务。

这是尝试在 wildfly 中部署应用程序时日志中的错误消息:

Deploying /home/john/codebase/servers/wildfly-8.2.0.Final/standalone/deployments/HouseCompetitionDashboard-1.0-SNAPSHOT.war
{"JBAS014671: Failed services" => {"jboss.deployment.unit.\"HouseCompetitionDashboard-1.0-SNAPSHOT.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"HouseCompetitionDashboard-1.0-SNAPSHOT.war\".WeldStartService: Failed to start service
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type DAO with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private org.jmcdonnell.dashboard.services.PlayerService.dao
  at org.jmcdonnell.dashboard.services.PlayerService.dao(PlayerService.java:0)
"}}

这些类看起来像这样:

@Named
public class DAO {
}



@Stateless
@Path("player")
public class PlayerService {

    @Inject
    private DAO dao;

    @POST
    @Consumes({"application/xml", "application/json"})
    public void create(Player entity) {
        //dao.create(entity);
    }
}

稍后 DAO 类将包含一个实体管理器,但目前它并没有,因为我至少想让注入工作。有人有什么想法吗?

【问题讨论】:

    标签: jakarta-ee cdi wildfly


    【解决方案1】:

    @Named annotaion 需要一些名称,并且未设置名称 - 它生成默认名称,但是,名称生成与 bean 的驼峰式名称一致。您需要尝试指定名称或使用驼峰式大小写作为 bean 名称。

    【讨论】:

    • 谢谢,不知道命名注释/骆驼大小写要求。
    • 这不是真的。如果我不得不猜测,您实际上缺少一个范围(假设您没有定义 beans.xml 或您的 beans.xml 为您的 bean 类型说 annotated
    • 这不应该是真的。但在某些情况下确实如此。我会说这是错误的实现,因为在某些情况下我会保存类似的问题。
    • 当你不使用 EL 来引用你的 bean 时,使用 @Named 真的没有用。
    猜你喜欢
    • 2015-04-29
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    相关资源
    最近更新 更多