naumcho
naumcho

Reputation: 19931

shortcut for injecting strings with spring

I inject Strings in my spring config by doing the following:

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

Is there a shorter way of doing it?

Update: I am using spring 3.0.3.

These are actually used to populate a list:

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

Seems like this works:

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

But I agree with the suggestions that this should eventually go in a property and be passed in.

Upvotes: 12

Views: 18924

Answers (3)

ikumen
ikumen

Reputation: 11663

In addition to the other answers and if you're using Spring 3.1+, you can use the constructor namespace.

<?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"
/>

Upvotes: 0

Aaron Digulla
Aaron Digulla

Reputation: 328840

There is no need to create a bean of type String. Just pass the value to constructor-arg:

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

works.

Upvotes: 4

Sotirios Delimanolis
Sotirios Delimanolis

Reputation: 280181

You should not have String beans. Just use their value directly.

Create a properties file strings.properties and put it on the classpath

strings.key=Region

Declare a PropertyPlaceholderConfigurer

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

Then annotate instance field Strings as

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

Spring will inject the value from the strings.properties file into this key String.

This obviously assumes that the class in which the @Value annotation appears is a bean managed in the same context as the PropertyPlaceholderConfigurer.

Upvotes: 14

Related Questions