Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf CDI@professional和构造函数注入@Postconstruct_Jsf_Dependency Injection_Cdi_Postconstruct - Fatal编程技术网

Jsf CDI@professional和构造函数注入@Postconstruct

Jsf CDI@professional和构造函数注入@Postconstruct,jsf,dependency-injection,cdi,postconstruct,Jsf,Dependency Injection,Cdi,Postconstruct,我有以下课程: @Named @ViewScoped public class BaseClass { private SomeDependency dep; public BaseClass(){} @Inject public BaseClass(SomeDependency dep) { this.dep = dep; } @PostConstruct private void initialize() {

我有以下课程:

@Named
@ViewScoped
public class BaseClass {
    private SomeDependency dep;

    public BaseClass(){}

    @Inject
    public BaseClass(SomeDependency dep) {
        this.dep = dep;
    }

    @PostConstruct
    private void initialize() {
        dep.doSomething(); // Point "A"
    }

    public String getProperty() {
        return "BaseClass-Property";
}

@Specializes
public class SpecialClass extends BaseClass() {

    @Override
    public String getProperty() {
        return "SpecialClass-Property";
    }
}
现在在一些.xhtml中,我有一些类似

<h:outputText value="#{baseClass.property}" />
IMHO有点违反直觉,产生了大量重复的样板代码,尤其是每个构造函数都有5-6个参数。此外,在创建新的专用bean时,这一点永远不会被发现,因为项目始终是编译干净的

我是做错了什么,还是除了一次又一次地实现构造函数之外没有其他选择


顺便说一句,我确实使用构造函数注入来创建易于测试的类,在这些类中,我可以使用构造函数“注入”依赖项的虚拟实现。

CDI 1.1规范第4.3节说:

“一个bean完全覆盖第二个bean的唯一方法是 注入点是指它是否实现了所有bean类型并声明 第二个bean的所有限定符。“


您的基类是用命名限定符注释的,而专门化类不是。您还应该用Alternative标记它,并在beans.xml中启用它。还有ViewScope注释。除非它是Omnifaces的ViewScope,否则它看起来像是将JSF托管bean与CDIBean混合在一起。

当然,即使默认的原始java实例化也会失败。构造函数不是继承的,除了默认的无参数构造函数。好吧,我知道“原始”实例化,我曾希望CDI逻辑可以减轻我作为程序员的负担…;-)提示:如果bean未实现Serializable,OmniFaces@ViewScoped会引发异常。它是OmniFaces ViewScoped,因为我在JEE6/CDI 1.0上,但1.0在该段落中声明了相同的规范。在那个项目中使用了专门的bean,所有的工作都很好,我只是在尝试注入构造函数逻辑,我希望它能以一种更简单的方式处理。。。
public SpecialClass() {}

@Inject
public SpecialClass(SomeDependency dep) { super(dep); }