2009-11-16 8 views

Répondre

0

Avez-vous réussi à le faire fonctionner en injectant explicitement la valeur du fichier de définition du bean en utilisant la syntaxe de la propriété? En théorie, si cela fonctionne, vous devriez pouvoir utiliser la même expression dans @Value. Pour cela, vous devriez pouvoir le faire en utilisant @Autowired @Qualifier aussi

0

Je ne pense pas qu'il soit possible d'accéder aux propriétés chargées par PropertyPlaceHolderConfigurer en utilisant SPEL dans une annotation @Value. Ce serait formidable, mais pour autant que je sache, la meilleure chose est de déclarer:

<util:properties id="props" location="classpath:xxx/yyy/app.props"/> 

Il peut pointer vers les mêmes propriétés que votre fichier PropertyPlaceHolderConfigurer.

+1

Vous pouvez créez aussi votre propre PropertyPlaceHolde rConfigurer qui expose ses propriétés. Vous pouvez trouver un exemple de ceci ici: http://mortarproject.svn.sourceforge.net/viewvc/mortarproject/src/trunk/mortar-core/src/main/java/org/mortar/spring/beans/factory/config /EnhancedPropertyPlaceholderConfigurer.java?revision=70&view=markup Vous devrez l'enregistrer en utilisant l'ancien à la place du plus récent afin de pouvoir définir un identifiant puis le référencer dans votre valeur tag comme @Value (# {xxx.properties ['foo.bar']}) – pakman

+0

Je ne pense pas que vous devez mettre le nom de fichier xxx.properties, printemps charge tous les fichiers de propriétés, vous devez juste vous assurer que votre clé est unique parmi tous les fichiers de propriétés. – Ashish

+0

Ceci est incorrect. Depuis le printemps 3, vous pouvez accéder aux valeurs PropertyPlaceHolderConfigurer à l'aide de SPEL. –

15

Question ancienne, mais qui mérite toujours d'être répondue. Vous pouvez utiliser l'expression de la même manière que vous le feriez avec l'original PropertyPlaceholderConfigurer.

app.properties

app.value=Injected 

app-context.xml

<bean id="propertyConfigurer" class="MyPropertyPlaceholderConfigurer"> 
     <property name="location"> 
     <value>file:app.properties</value> 
     </property> 
    </bean> 

dans la fève cible

@Value(value="${app.value}") 
    private String injected; 

testé cette approche avec Spring 3.0.6

+0

L'extra # {...} est en quelque sorte inutile (il fait une évaluation SpEL d'une chaîne statique). Depuis Spring 3.x, la syntaxe $ {app.value} est supportée dans les annotations @Value, et peut être utilisée pour injecter la propriété (mais ce n'était probablement pas le cas au moment où cette question a été posée). – MikeN

+0

Vous avez raison concernant le supplément # {...}. Vous pouvez l'omettre et vous obtiendrez le même résultat. Je corrigerai ma réponse pour m'en débarrasser. – micfra

Questions connexes