Java 在SpringWebFlow中创建新对象的首选替代方案

Java 在SpringWebFlow中创建新对象的首选替代方案,java,spring-webflow,Java,Spring Webflow,我目前正在使用spring3.1.2(webflow版本2.3.1),我再次面临一个旧问题。问题是通过SpringWebFlow创建一个新对象。所以我想做的是: 您可以使用: <var name="object1" class="my.package.Object" /> <set name="objectHolder.object" value="object1" /> 第一行将通过构造函数创建一个新对象,第二行将其设置为objectHolder类中的变量对象(通

我目前正在使用
spring3.1.2(webflow版本2.3.1)
,我再次面临一个旧问题。问题是通过SpringWebFlow创建一个新对象。所以我想做的是:

您可以使用:

<var name="object1" class="my.package.Object" />
<set name="objectHolder.object" value="object1" />

第一行将通过构造函数创建一个新对象,第二行将其设置为objectHolder类中的变量对象(通过setter)

或:


其中:
public Object createObject{return new Object()}

该'value'属性接受SpEL(),因此您可以使用'new'运算符,只需确保您使用的是完全限定的类名。最后,默认情况下,新创建的对象位于流范围内,但您可以显式指定所需的范围,这对我很有用:

<view-state id="searchScreen" view="/WEB-INF/jsp/query.view.jsp">
    <on-entry>
        <set name="flashScope.test" value="new java.util.Date()"/>
    </on-entry>
    <transition on="..." to="...">
        <evaluate expression="..."/>
    </transition>
</view-state>

我建议为您的对象创建一个Java工厂。而您可以创建一个对象,如:

<on-entry>
        <set name="flashScope.test" value="new java.util.Date()"/>
</on-entry>
然后从webflow调用它,如:

<on-entry>
        <set name="flashScope.yourObject" value="webflowBeanFactory.yourObjectBean(anyVariable)"/>
</on-entry>


一开始可能是这样,但也许我应该在问题中添加一条关键信息:“新”对象需要在每次进行特定转换时启动。因此,这将在第一次使用时起作用,但随后将重复使用相同的对象…因此在第2行中设置value=“factory.createObject()”以便每次设置objectHolder.object时都会得到一个新对象。尽管我不喜欢在xml文件中编程,但如果这是目前最好/唯一的解决方案,我确实认为这将是SpEL的一个缺点。为不包含任何逻辑或相关信息的对象创建静态工厂是非常奇怪的。我现在谈论的是普通和简单的模型对象。无论如何,谢谢你的意见。看起来我们的方法是一样的,所以静态工厂做你需要的,对吗?你只是在寻找一种替代方法?实际上,我只是想知道哪种方法是最好的,因为在我遇到的一些情况下,创建静态工厂似乎有点愚蠢。但你是对的,是的。理解并同意。我只是想澄清一下。事实上,我认为在视图状态中声明var可以完成它,但是当我刚刚阅读最新文档时,很明显,即使这样做,仍然使用流范围的实例。很好的答案,这确实解决了这个问题!我不知道在这种情况下写完全限定名的必要性。我非常感谢你!
@Component("webflowBeanFactory")
public class WebflowBeanFactory {    
    public static YourObject yourObjectBean(Object argument) {
        return new YourObject(argument);
    }
}
<on-entry>
        <set name="flashScope.yourObject" value="webflowBeanFactory.yourObjectBean(anyVariable)"/>
</on-entry>