【问题标题】:spring webflow variable serializationspring webflow变量序列化
【发布时间】:2014-02-27 05:24:02
【问题描述】:

我有为三个不同实体提供处理服务的流程。因此,我有具有常见流状态的父流定义,在具体流定义中,我使用真实数据和操作实现扩展了该流。

我想将处理实体的bean实例存储在变量中,这样我就可以在父流定义中访问这个变量。

在父流定义中

<action-state id="prepareReview" >
    <evaluate expression="processor.prepare(modelInstance)" />
    <transition to="check" />
</action-state>

在具体的流程定义中我有

<on-start>
    <set name="flowScope.processor" value="concreteProcessor"/>
</on-start>

其中concreteProcessor 是一个实现必要处​​理的单例bean。它是无状态的,因此序列化它是没有用的,而且它包含自动装配的 dao 变量,其实现使用无法序列化的 HibernateDaoSupport。

有什么办法可以解决这个问题吗?我有一个解决方案,但是不是很方便,因为我需要在具体处理器方法调用的每个具体流定义样板代码中编写。

<action-state id="prepareReview" parent="common#prepareReview">
    <evaluate expression="concreteProcessor.prepare(modelInstance)" />
</action-state>

这有点麻烦。

【问题讨论】:

    标签: spring spring-webflow-2


    【解决方案1】:

    您可以在 ConcreteProcessor 上使用范围代理:

    @Component
    @Scope(proxyMode=ScopedProxyMode.TARGET_CLASS,value=ConfigurableBeanFactory.SCOPE_SINGLETON)
    

    这将注入 CGLIB 代理而不是 ConcreteProcessor 的实际实例。 Proxy是可序列化的,反序列化时会重新注入依赖。

    缺点是你的类路径中必须有 CGLIB。或者,使用基于接口的代理与

    @Scope(proxyMode=ScopedProxyMode.INTERFACES,value=ConfigurableBeanFactory.SCOPE_SINGLETON)
    

    但是你的ConcreteProcessor 必须实现一个接口。

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2015-05-19
      • 2011-07-06
      • 2015-02-16
      • 2017-05-06
      • 2018-09-22
      相关资源
      最近更新 更多