5

私はクラスの階層を使用していますが、最適な方法は、メンバーとメソッド@ManagedBeanを持つクラスを継承するクラスを作成することです。@ManagedProperty@PostConstruct

具体的には、これは機能しますか?:

public class A {

    @ManagedProperty
    private C c;

    @PostConstruct
    public void init() {
        // Do some initialization stuff
    }

    public C getC() {
        return c;
    }

    public void setC(C c) {
        this.c = c;
    }
}

@ManagedBean
@SessionScoped
public class B extends A {
    // Content...
}

前もって感謝します!

4

1 に答える 1

13

@ManagedPropertyは継承され、そのように機能します。@PostConstructサブクラス自体にメソッドがない場合は、も継承されます@PostConstruct。つまり、1つしか存在できません。したがって、サブクラス自体にが含まれている場合@PostConstruct、スーパークラスのクラスは呼び出されません。

したがって@PostConstruct、サブクラスでをオーバーライドする場合は、スーパークラスを明示的に呼び出す必要があります。

public class SuperBean {

    @PostConstruct
    public void init() {
        // ...
    }

}
@ManagedBean
public class SubBean extends SuperBean {

    @PostConstruct
    public void init() {
        super.init();
        // ...
    }

}

または、サブクラスが実装する必要のある抽象メソッドを提供します(@PostConstruct!なし)。

public class SuperBean {

    @PostConstruct
    public void superInit() {
        // ...
        init();
    }

    public abstract void init();

}
@ManagedBean
public class SubBean extends SuperBean {

    @Override
    public void init() {
        // ...
    }

}
于 2012-10-29T11:54:31.190 に答える