web-dev-qa-db-fra.com

lire une liste de propriétés dynamique dans un haricot géré par un ressort

J'ai cherché mais je ne trouve pas ces étapes. J'espère que je manque quelque chose d'évident.

J'ai un fichier de propriétés avec le contenu suivant:

machines=A,B

J'ai un autre fichier comme ça mais ayant un nombre différent de membres dans l'élément machines comme ceci:

machines=B,C,D

Ma question est la suivante: comment charger cette variable de machine de longueur variable dans un haricot de ma configuration de printemps de manière générique?

quelque chose comme ça:

<property name="machines" value="${machines}"/>

où machines est un tableau ou une liste dans mon code Java. Je peux le définir comme je le veux si je peux comprendre comment faire cela.

Fondamentalement, je préférerais que spring fasse l'analyse et colle chaque valeur dans un élément de la liste plutôt que de devoir écrire quelque chose qui se lit dans la chaîne machines complètes et effectuer l'analyse moi-même (avec le délimiteur de virgule) pour mettre chaque valeur dans un tableau ou liste. Y at-il un moyen facile de faire cela qui me manque? 

27
bob

Vous voudrez peut-être jeter un coup d'œil à la classe StringUtils de Spring. Il existe un certain nombre de méthodes utiles pour convertir une liste séparée par des virgules en un ensemble ou un tableau de chaînes. Vous pouvez utiliser n'importe laquelle de ces méthodes utilitaires, en utilisant le framework de méthodes d'usine de Spring, pour injecter une valeur analysée dans votre bean. Voici un exemple: 

<property name="machines">
    <bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
        <constructor-arg type="Java.lang.String" value="${machines}"/>
    </bean>
</property>

Dans cet exemple, la valeur pour 'machines' est chargée à partir du fichier de propriétés. 

Si une méthode d’utilité existante ne répond pas à vos besoins, il est assez simple de créer la vôtre. Cette technique vous permet d'exécuter n'importe quelle méthode utilitaire statique.

31
Kris Babic

Spring EL facilite. Java:

List <String> machines;

Le contexte:

<property name="machines" value="#{T(Java.util.Arrays).asList('${machines}')}"/>
19
Jingyang Peng

Si vous faites de la propriété "machines" un tableau de chaînes, alors spring le fera automatiquement pour vous

machines=B,C,D

<property name="machines" value="${machines}"/>

public void setMachines(String[] test) {
16
Simon Gibbs

Depuis Spring 3.0, il est également possible de lire la liste de valeurs à l'aide de l'annotation @Value.

Fichier de propriété:

machines=B,C,D

Code Java:

import org.springframework.beans.factory.annotation.Value;

@Value("#{'${machines}'.split(',')}")
private List<String> machines;
4
DAMungra

Vous pouvez directement injecter les valeurs dans la liste sans code passe-partout. (Spring 3.1+)

@Value("${machines}")
private List<String> machines;

pour la clé "machines = B, C, D" dans le fichier de propriétés en créant les deux instances suivantes de votre configuration.

@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
}

@Bean 
public ConversionService conversionService() {
    return new DefaultConversionService();
}

Ceux-ci couvriront tous les découpages séparés basés sur les divisions et les espaces blancs.

0
wonhee