在SESSIONS.ser中通过Tomcat反序列化之后,如何依赖注入标记为@Configurable的bean?

注意:除非您非常熟悉Java,Spring AOP和Tomcat,否则这没有任何意义。 问题是当Tomcat SESSIONS.ser反序列化时,不会注入标记为@Configurable的bean。 我在使用Spring 2.5.4,spring-tomcat-weaver-2.5.4,Tomcat 6.0.14的基于Struts 1.2.9的(遗留)应用程序上注意到了这种行为。 码:
public class MyForm implements Serializable {
   private Foo myFoo; // getters and setters
}

public class Foo imlements Serializable {
   private Bar myBar; // getters setters
}

@Configurable("barTemplate")
public class Bar implements Serializable {
   @Autowired(required=true)
   private transient SessionFactory hello;
   // other transient dependencies ...
}
XML将Bar配置为原型bean。 正确的上下文:spring-configured和context:load-time-weaver设置应用等(因为它适用于Tomcat的冷启动)。 第一次开始时一切正常。但是,重新启动Tomcat会导致写入SESSIONS.ser并在重新启动时反序列化MyForm,它会执行此操作。但是,Bar中的所有依赖项都没有设置! 但是如果我关闭Tomcat,删除SESSIONS.ser文件,然后重新启动,那么一切都会正常工作。 奇怪的。 任何建议都非常感谢。     
已邀请:
因为我不这样做,所以我会跳过Spring部分。但我必须承认,我也期望Spring在反序列化之后足够聪明地重新注入它们(编辑:这似乎在Spring 2.5.2中修复了吗?)。 其中一个解决方法是在Tomcat关闭/启动期间禁用会话序列化。这样你就可以从一个全新的会话开始,一切都将刚刚构建和注入。然而,缺点是每当Tomcat重新启动时,最终用户将丢失其会话数据。 要实现这一点,请将
<Manager>
元素与空
pathname
添加到相关webapp的
<Context>
元素中。
<Context ...>
    <Manager pathname="" />
</Context>
这基本上指示Tomcat根本不使用会话管理器。     

要回复问题请先登录注册