12

我通过执行以下操作在我的 spring 配置中注入字符串:

<bean class="java.lang.String">
    <constructor-arg type="java.lang.String" value="Region" />
</bean>

有更短的方法吗?

更新: 我正在使用 spring 3.0.3。

这些实际上用于填充列表:

        <list>
            <bean class="java.lang.String">
                <constructor-arg type="java.lang.String" value="Region" />
            </bean>
            ...

似乎这样有效:

<list>
   <value>Region</value>
   <value>Name</value>
   ....

但我同意这最终应该进入一个属性并被传递的建议。

4

3 回答 3

14

你不应该吃String豆子。直接使用它们的值。

创建一个属性文件strings.properties并将其放在类路径中

strings.key=Region

声明一个PropertyPlaceholderConfigurer

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>strings.properties</value>
    </property>
</bean>

然后将实例字段字符串注释为

@Value("${strings.key}")
private String key;

Spring 会将strings.properties文件中的值注入到这个key字符串中。

这显然假设@Value注释出现的类是在与PropertyPlaceholderConfigurer.

于 2013-09-03T15:41:02.537 回答
4

无需创建 bean 类型String。只需将值传递给constructor-arg

<bean id="foo" class="x.y.Foo">
    <constructor-arg value="Region"/>
</bean>

作品。

于 2013-09-03T15:46:19.880 回答
0

除了其他答案之外,如果您使用的是 Spring 3.1+,您可以使用构造函数命名空间。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:c="http://www.springframework.org/schema/c" <-- add c namespace
  ...

<bean id="someClass" class="a.b.c.SomeClass"
  c:someProperty="Region"
/>
于 2013-09-03T15:59:09.173 回答