Reputation: 19931
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
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
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
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