tags:

views:

1125

answers:

4

I would really like to annotate a method with a reference to a single property in a property file for injection.

@Resource("${my.service.url"}}
private String myServiceUrl;

Of course, this syntax does not work ;) Thats why I'm asking here.

I am aware that I can inject the full properties file, but that just seems excessive, I dont want the property file - I want the configured value.

Edit: I can only see PropertyPlaceholderConfigurer examples where XML is used to wire the property to the given field. I still cannot figure out how this can be achieved with an annotation ?

A: 

You could try injecting value of property "my.service.url" to a filed in your bean.

Take a look at: http://static.springframework.org/spring/docs/2.5.x/reference/beans.html#beans-factory-placeholderconfigurer

HTH.

Hubert
A: 

you can do this if you use XML configuration. Just configure PropertyPlaceholderConfigurer and specify property value in configuration

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>classpath:com/foo/jdbc.properties</value>
    </property>
</bean>
<bean ...>
  <property name="myServiceUrl" value="${my.service.url}"/>
</bean>
miceuz
+3  A: 

There's a thread about this on the Spring forum. The short answer is that there's really no way to inject a single property using annotations.

I've heard that the support for using annotations will be improved in Spring 3.0, so it's likely this will be addressed soon.

Don
+1  A: 

I know it has been a while since the original post but I have managed to stumble across a solution to this for spring 2.5.x

You can create instances of "String" beans in the spring xml configuration which can then be injected into the Annotated components

@Component
public class SomeCompent{
  @Autowired(required=true 
  @Resource("someStringBeanId")
  private String aProperty;

  ...
}

<beans ....>
   <context:component-scan base-package="..."/>

  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    ...
  </bean>
  <bean id="someStringId" class="java.lang.String" factory-method="valueOf">
    <constructor-arg value="${place-holder}"/>
  </bean>
</beans>