日期:2014-05-17  浏览次数:20685 次

strut2 与spring 整合之后创建action谁负责销毁?

   最近在学习三大框架,看到了整合这一块,之前 struts2.0 中的创建的Action使用的是    com.opensymphony.xwork2.ObjectFactory ,应对每次客户端的请求,它都会创建一个新的实例,至于这个实例何时销毁,由XWORK来控制。内部应该是xwork有一套像spring一样的IOC机制。这个我理解
  在学到Struts2和Spring 整合的时候,Action实例由Spring提供,并且需要将其scope="prototype",这样每次对该bean请求时都会创建一个新的bean实例。
   接下来问题来了——
    
   那就是Spring不能对一个prototype bean的整个生命周期负责:容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了
   
   我想问这个Action是不是spring负责销毁?如果是,Spring容器如何销毁,如果不是?那么他又该怎么运作?

------解决方案--------------------
在补充一点,由于Action这类bean不是单例的,所以如果设置成prototype的话,spring不负责销毁,这个你上文也说过了。不过在spring 2.0后引入了另外三个scope属性值(对web来说),有request,session,global session,这个由名字也能看出其生存范围了。所以struts的Action的scope应该配置成request而不是prototype,你可以看成是prototype的特例。
不过我由去查了下文档,文档里说的集成方式确实写着prototypt,然后我在这个http://struts.apache.org/development/2.x/docs/spring-plugin.html上看到了这样一段话,