@ManagedPropery和@PostConstruct可以放在基类中吗?

时间:2012-10-29 08:00:34

标签: jsf-2 subclass managed-bean postconstruct managed-property

我正在使用类的层次结构,我最好尝试做的是@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...
}

提前致谢!

1 个答案:

答案 0 :(得分:13)

@ManagedProperty是继承的,只会以这种方式工作。如果子类本身没有@PostConstruct方法,@PostConstruct也将被继承。可能只有一个。因此,如果子类本身具有@PostConstruct,那么将不会调用超类“one”。

因此,如果覆盖子类中的@PostConstruct,那么您需要显式调用超类'one。

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() {
        // ...
    }

}