当前位置: 首页 > 知识库问答 >
问题:

WELD-001408:类型UserService与限定符@Default在注入点[BackedAnNotatedField]@Inject的未满足依赖

支淮晨
2023-03-14

我在@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>```


共有1个答案

陶高峯
2023-03-14

从DI容器产生的错误消息中可以明显看出您收到此错误的原因。

注入点处带有限定符@Default的UserService类型的未满足依赖关系

容器通知您,对于请求的实现,没有可以注入的bean(即UserService)。

添加@Singleton注释可以让DI容器看到这一点,同时自动符合注入条件。

所讨论的注释的工作方式与另一个类上的@ConversationScoped基本相同,尽管bean的可用范围有一些不同。

我建议你好好阅读一下bean和DI通常是如何处理的。

 类似资料: