在struts2里面,每个用户的每次请求过来,都会产生一个action的对象。但是spring之中,所有的bean交给BeanFactory之后,默认的是singleton的,当struts2+spring的时候,struts的ObjectFactory交给spring托管,那么action的实例化个数到底是多少个呢?希望有高手可以解答。

解决方案 »

  1.   

    默认情况下,struts是线程安全的(和servlet不一样,servlet是单态的),但是一般我们把struts交给spring管理的时候,spring对bean的初始化都是默认单态的,所有需要对action的bean加上scope="prototype"这样action的bean就不是单态的了
      

  2.   


    如果不在每个action的Bean之后加入scope="property"属性,action就是单例的么?
      

  3.   

    经过测试,答案是对的,十分感谢您的释疑。import org.junit.Test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;import com.zndt.znfw.action.MessageAction;
    public class MessageActionImplTest {
    @Test
    public void actionTest(){
    BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");
    MessageAction am = (MessageAction)bf.getBean("messageAction");
    MessageAction am02 = (MessageAction)bf.getBean("messageAction");
    System.out.println(am==am02);
    /* 1、在默认的情况下输出为:true */
    /* 2、在action层的spring配置文件加上scope="prototype"之后,输出:false */