【问题标题】:WELD-001408: Unsatisfied dependencies for type UserService with qualifiers @Default at injection point [BackedAnnotatedField] @InjectWELD-001408:在注入点 [BackedAnnotatedField] @Inject 具有限定符 @Default 的类型 UserService 的依赖关系不满足
【发布时间】:2020-05-04 05:16:01
【问题描述】:

@Inject 时出现错误。我不明白为什么。

我的应用服务器:GlassFish 4.1.2

当我@Inject我创建的类时服务器报错

java.io.IOException: com.sun.enterprise.admin.remote.RemoteFailureException: Error occurred during deployment: Exception while loading the app : CDI deployment failure:WELD-001408: Unsatisfied dependencies for type UserService with qualifiers @Default at injection point [BackedAnnotatedField] @Inject private jobs.SignUpCDIB.userServiceat jobs.SignUpCDIB.userService(SignUpCDIB.java:0)

当我 @Inject 我创建的类时服务器出错

package jobs;

import services.UserService;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import java.io.Serializable;

@Named
@ConversationScoped
public class SignUpCDIB implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject
    private UserService userService;
}

我正在尝试将其注入另一个类,例如:

package services;

import jobs.User;

public interface UserService {

    void save(User user);
}

UserService实现java类

package services;

import jobs.User;

import java.io.Serializable;

public class UserServiceImpl implements UserService, Serializable {
    @Override
    public void save(User user) {

    }
}

Maven pom xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>loginTutorials1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.2.13</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.2.13</version>
        </dependency>

        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <dependency>
            <groupId>javax.enterprise</groupId>
            <artifactId>cdi-api</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>```


【问题讨论】:

  • 你的依赖管理完全错误。首先为 java-ee 项目创建一个好的 pom。提示“提供”是这里的关键(词)
  • 你能告诉我哪里做错了吗?
  • @ResulZOROĞLU 你能尝试将服务的实现注释为@Singleton吗?
  • 其中导入javax.ejb.Singleton,导入javax.inject.Singleton; @akortex91
  • 我向您指出多个详细的答案。选择最适合您的一款。我没有直接回答的原因是我不确定这种错误配置是否是导致您的问题的原因(可能是,也可能不是),但至少 pom 是错误的。祝你好运(我的意思是积极的)但是从现在开始我会忽略你并且不会指出你的配置错误。如果您从教程中获得了这个 pom,请放弃使用它,这很糟糕......哦,堆栈跟踪包含更多关于错误的信息。 (可能有几种类型的不满足的依赖关系)。干杯!

标签: java dependency-injection glassfish cdi


【解决方案1】:

您收到此错误的原因可以从 DI 容器生成的错误消息中看出。如您所见:

Unsatisfied dependencies for type UserService with qualifiers @Default at injection point

容器会通知您,对于请求的实现,没有适合注入的 bean(即 UserService 就是这种情况)。

添加@Singleton 注释使其对 DI 容器可见,同时自动符合注入条件。

有问题的注释的工作方式与您在其他类中的@ConversationScoped 几乎相同,尽管在 bean 的可用范围方面存在一些差异。

我建议你好好阅读一下 bean 和 DI 的一般处理方式。

【讨论】:

  • 首先,非常感谢您的回答。在我之前的项目中,如果不使用@Default 和@Singleton,我不会收到错误消息。我的 pom.xml 文件有问题,有什么区别?现在我还是不明白他为什么会犯错。
  • 它起作用了,因为我写了@Singleton。但是 DI 工作得完美无缺,在 Glassfish 4.1.1 版本中什么也没有。在我一年前开发的项目中,为什么不写@Singleton 并没有报错。我很好奇差异。我错过了什么?如果你愿意,我可以毫无错误地分享我以前的项目。
  • 这可能取决于几个因素。 DI容器不同或不同版本等等。如果我的回答对您有帮助并解决了问题,请继续投票并使其成为建议的答案。
猜你喜欢
  • 1970-01-01
  • 2020-03-26
  • 2015-06-10
  • 2018-12-19
  • 2015-04-05
  • 1970-01-01
  • 2014-12-20
  • 2017-08-28
  • 1970-01-01
相关资源
最近更新 更多