4

我知道 Spring 3.0 及更高版本有 EL,但在这种情况下,项目使用 Spring 2.5 ,例如:

<bean id="dir" class="java.lang.String">
    <constructor-arg value="c:/work/"
</bean>

<bean id="file" class="java.lang.String">
    <constructor-arg value="file.properties" />
</bean>

<bean id="path" class="java.lang.String">
    <constructor-arg value=**dir +  file**/>
</bean>
4

4 回答 4

6

这行得通吗?

<bean id="dir" class="java.lang.String">
    <constructor-arg value="c:/work/"
</bean>

<bean id="file" class="java.lang.String">
    <constructor-arg value="file.properties" />
</bean>

<bean id="path" factory-bean="dir" factory-method="concat">
    <constructor-arg ref="file"/>
</bean>

注意String.concat(java.lang.String)方法 as的用法factory-method

但是 XML 并不是这类东西的最佳位置,那么 Java@Configuration呢?

@Configuration
public class Cfg {
    @Bean
    public String dir() {
        return "c:/work/";
    }

    @Bean
    public String file() {
        return "file.properties";
    }

    @Bean
    public String path() {
        return dir() + file();
    }
}
于 2012-07-19T17:33:38.790 回答
2

Spring 不是这样存储应用程序逻辑的地方。

如果需要,请添加一个执行以下操作的getPath()方法:

public String getPath() {
    if(path == null) {
        path = getDir() + getPath();
    }
    return path;
}
于 2012-07-19T17:24:45.713 回答
0

您是否尝试过使用 Spring-EL?看看这个链接

使用 Spring-EL,您可以执行以下操作:

<bean id="dir" class="java.lang.String">
    <property name="path" value="c:/work/" />
</bean>
<bean id="file" class="java.lang.String">
    <property name="fileName" value="file.properties" />
</bean>
<bean id="path" class="java.lang.String">
    <property name="initialShapeSeed" value="#{dir.path}#{file.fileName}"/>
</bean>

这从 Spring 3.0 开始可用。

于 2012-07-19T17:28:08.627 回答
0

您可以使用 ref 代替 value。IE

<bean id="path" class="java.lang.String">
    <constructor-arg ref="file"/>
</bean>
于 2012-07-19T17:29:14.257 回答