0

我有一个枚举 ContentType,它有一个类似 ContentType.getName() 的方法,可以评估为 regText OR session。那么,我该如何执行以下操作,我可以根据此方法的返回值实例化 bean。此外,我只想在 XML 配置而不是注释中执行此操作。

<property name="contentCaptureRegEx" ref="${ContentType.getName()}">
</property>

<bean id="regText" class="java.util.regex.Pattern" factory-method="compile" lazy-init="true">
<constructor-arg value="xyz" /></bean>

<bean id="session" class="java.util.regex.Pattern" factory-method="compile" lazy-init="true">
<constructor-arg value="abc" /></bean>
4

1 回答 1

1

我建议使用静态工厂方法,因为模式正则表达式已经在使用该模式。只需消除它们并添加:

package com.mine;

public class MyFactory {

    public static Pattern newContentCaptureRegEx() {
        String patternString;
        if ("regText".equals(ContentType.getName())) {
            patternString = "xyz";
        } else if ("session".equals(ContentType.getName())) {
            patternString = "abc";
        } else {
            throw new IllegalStateException("ContentType must be regText or session");
        }
        Pattern.compile(patternString);
    }

}

您可以将其连接为:

<bean id="ContentCaptureRegEx" class="com.mine.MyFactory"
    factory-method="newContentCaptureRegEx" />

然后你可以在任何地方引用那个bean:

<property name="contentCaptureRegEx" ref="ContentCaptureRegEx" />
于 2012-08-20T15:46:02.077 回答