谁解释一下在 Struts2的Action中被@PostConstruct注解的方法,在页面请求action其他方法时也会调用


   
  @PostConstruct
  
public void init()
{
System.out.println("init");
}

public String execute()
{
System.out.println("execute");
return SUCCESS;
}

做了一个小实验:写一个普通Action,加上一个@PostConstruct注解的方法,然后 从页面上反复请求这个action的时候,每次都会发现init()方法在execute方法之前执行了 ,这次什么原理,希望有人解答一下。
按照我的理解是,@PostConstruct只在Action被Spring实例化的时候调用的,但是为什么页面请求这个Action的时候,@PostConstruct注解的方法还会调用。我不理解的是这个,不是PostConstruct的调用顺序。

其实还有更有意思的事

   
  @Resource
  
private IDAO dao;
@PostConstruct
public void init()
{
System.out.println(dao==null);
}

public String execute()
{
System.out.println("execute");
return SUCCESS;
}

再做一个实验:注入一个dao,可以发现在Spring初始化容器的时候,init方法输出“false”,但是在页面请求action的时候,init则输出“true”。甚是不解。

spring struts

从小信春哥 12 years, 7 months ago

容器创建Action后看到有PostConstruct标注的方法就调用此方法,以完成初始化的操作,此方法在构造函数后,因为构造函数是在类创建时,也就是new或者class.newInstance()时调用,PostConstruct标注的方法是类创建后调用反射调用的。

路痴型夏夜 answered 12 years, 7 months ago

Your Answer