我有一个枚举ContentType,它有一个类似ContentType.getName()的方法,它可以评估为regText或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>
答案 0 :(得分: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" />