对具有特定构造函数

时间:2015-12-01 08:26:06

标签: constructor cdi inject

我有一个与CDI警告相关的问题,警告注入点不满意或模糊不清。

这段代码:

@Named(value = "LoginView")
@RequestScoped
public class LoginView implements Serialization {
    private static final long serialVersionUID = 1L;

    @Inject
    private  UserContext userContext;

}
@Named
@ApplicationScoped
public class UserContext implements Serialization {

    public UserContext(String app, String prod, List<String>prodLines) {
        this.app=app;
        this.prod=prod;
        this.prodLines = prodLines;
    }
}

我明白了:

  

org.weld.exceptions.DeploymentExceptions:带有限定符[@Inject]注入点的[UserContext]类型的不满足依赖项。

如果我尝试删除@Inject,则修复了部署问题,但usercontext对象为null,因此抛出NullPointerException。我没有使用EJB,因此无法使用@EJB而不是@Inject

1 个答案:

答案 0 :(得分:1)

通过在UserContext中创建无参数构造函数来解决问题。创建了一个参数化构造函数,因此CDI注入无法调用默认构造函数。我们已经明确创建了一个默认的no-argmument构造函数,因此CDI注入工作。 创建了beans.xml,用于修复未满足和不明确的依赖项,并添加到META-INF。如果已显式启用实现bean类型且具有相应限定符类型的@Alternative bean,则使用beans.xml。