不调用@PostConstruct方法

时间:2014-01-23 20:03:42

标签: jsf jsf-2 postconstruct

我想使用@PostConstruct在我的webapp中初始化bean,但我无法让它工作。

我在一个新项目中重新创建了这个问题但它仍然无效。

我错过了一些明显的东西吗?据我所知,我的init()方法符合@PostConstruct API参考中列出的所有要求。

MyBean.java

@ManagedBean
@RequestScoped
public class MyBean {
    @ManagedProperty(value="15")
    private int number = 10;

    @PostConstruct
    public void init(){
        number = 20;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}

number.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">

<h:head>
    <title>Simple JSF Facelets page</title>
</h:head>

<h:body>
    Number = #{myBean.number}
</h:body>

</html>

我希望Number = 20,但我得到Number = 15

2 个答案:

答案 0 :(得分:0)

@PostConstruct似乎在注入@ManagedProperty之前被调用,假设您有MyFaces 2.0,正如他们所说here

确保使用Mojarra 2.1,因为它应该可以使用。

您可能尝试调试以了解在注入之前是否调用了init()方法,或者从未调用过。

答案 1 :(得分:-1)

默认情况下,Spring不会知道@PostConstruct和@PreDestroy注释。要启用它,您必须注册CommonAnnotationBeanPostProcessor或在bean配置文件中指定<context:annotation-config />