2008-10-20 5 views
6

Je voudrais vraiment annoter une méthode avec une référence à une seule propriété dans un fichier de propriétés pour injection.Comment injecter une seule valeur de propriété dans une chaîne en utilisant spring 2.5.x?

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

Bien sûr, cette syntaxe ne fonctionne pas;) C'est pourquoi je demande ici.

Je suis conscient que je peux injecter le fichier de propriétés complet, mais cela semble excessif, je ne veux pas le fichier de propriété - Je veux la valeur configurée.

Éditer: Je ne peux voir que des exemples PropertyPlaceholderConfigurer où XML est utilisé pour connecter la propriété au champ donné. Je n'arrive toujours pas à comprendre comment cela peut être réalisé avec une annotation?

Répondre

4

Il y a un fil à ce sujet sur le Spring forum. La réponse courte est qu'il n'y a vraiment aucun moyen d'injecter une seule propriété en utilisant des annotations.

J'ai entendu dire que la prise en charge de l'utilisation des annotations sera améliorée au printemps 3.0, il est donc probable que cela sera traité prochainement.

0

Il suffit de configurer PropertyPlaceholderConfigurer et spécifier la valeur de la propriété dans la 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> 
7

Je sais que cela a été un moment que le message original mais j'ai réussi à tomber sur une solution à ce printemps 2.5.x

Vous pouvez créer des instances de « chaîne » haricots dans la configuration xml ressort qui peut ensuite être injecté dans les composants annotées

@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> 
+0

Cette solution ne fonctionne pas pour moi. Tout d'abord, il semble y avoir des erreurs de syntaxe partout - il vous manque le bon parent après la déclaration autowire, et l'annotation de la ressource n'a pas l'attribut name. Enfin, je reçois une BeanCreationException avec ce XML :( – IcedDante

Questions connexes