298

.properties ファイルに値のリストが必要です。つまり、次のようになります。

my.list.of.strings=ABC,CDE,EFG

そして、それをクラスに直接ロードするには、次のようにします。

@Value("${my.list.of.strings}")
private List<String> myList;

私が理解しているように、これを行う代わりに、それをSpring構成ファイルに入れ、それをBean参照としてロードします(間違っている場合は修正してください)。

<bean name="list">
 <list>
  <value>ABC</value>
  <value>CDE</value>
  <value>EFG</value>
 </list>
</bean>

しかし、これを行う方法はありますか?.properties ファイルを使用していますか? ps: 可能であれば、カスタム コードを使用せずにこれを行いたいと思います。

4

17 に答える 17

559

Spring EL の使用:

@Value("#{'${my.list.of.strings}'.split(',')}") 
private List<String> myList;

プロパティ ファイルが次のように正しく読み込まれていると仮定します。

my.list.of.strings=ABC,CDE,EFG
于 2012-09-25T09:41:10.403 に答える
43

my.list.of.strings=ABC,CDE,EFG.properties ファイルで を指定し、

@Value("${my.list.of.strings}") private String[] myString;

文字列の配列を取得できます。を使用するCollectionUtils.addAll(myList, myString)と、文字列のリストを取得できます。

于 2012-09-25T04:57:15.077 に答える
20

@AutowiredコンストラクターまたはセッターをString.split()ing し、本体で ing することを検討しましたか?

class MyClass {
    private List<String> myList;

    @Autowired
    public MyClass(@Value("${my.list.of.strings}") final String strs) {
        myList = Arrays.asList(strs.split(","));
    }

    //or

    @Autowired
    public void setMyList(@Value("${my.list.of.strings}") final String strs) {
        myList = Arrays.asList(strs.split(","));
    }
}

私は、コードのテスト容易性を高めるために、これらの方法のいずれかで自動配線を行うことを好む傾向があります。

于 2012-09-25T04:42:53.137 に答える
6

Spring Boot 2.2.6 を使用しています

私のプロパティファイル:

usa.big.banks= JP Morgan, Wells Fargo, Citigroup, Morgan Stanley, Goldman Sachs

私のコード:

@Value("${usa.big.banks}")
    private List<String> bigBanks;

@RequestMapping("/bigbanks")
    public String getBanks() {
        System.out.println("bigBanks = " + bigBanks);
        return bigBanks.toString();
    }

それは正常に動作します

于 2020-04-20T06:31:34.387 に答える
3

このような注釈でこれを行うことができます

 @Value("#{T(java.util.Arrays).asList('${my.list.of.strings:a,b,c}')}") 
    private List<String> mylist;

ここで my.list.of.strings はプロパティ ファイルから選択されます。存在しない場合は、デフォルトの a、b、c が使用されます。

プロパティファイルには、次のようなものを含めることができます

my.list.of.strings=d,e,f

于 2013-09-09T20:58:38.020 に答える
1

Commons Configuration の使用を検討してください。プロパティファイルのエントリを配列/リストに分割する機能が組み込まれています。SpEL と @Value を組み合わせると、必要なものが得られます


リクエストに応じて、必要なものは次のとおりです (コードを実際に試していないため、タイプミスがある可能性があります。ご容赦ください)。

Apache Commons Configuration には、PropertiesConfiguration があります。区切られた文字列を配列/リストに変換する機能をサポートしています。

たとえば、プロパティ ファイルがある場合

#Foo.properties
foo=bar1, bar2, bar3

以下のコードで:

PropertiesConfiguration config = new PropertiesConfiguration("Foo.properties");
String[] values = config.getStringArray("foo");

の文字列配列が得られます["bar1", "bar2", "bar3"]

Spring で使用するには、これをアプリ コンテキスト xml に含めます。

<bean id="fooConfig" class="org.apache.commons.configuration.PropertiesConfiguration">
    <constructor-arg type="java.lang.String" value="classpath:/Foo.properties"/>
</bean>

これをSpring Beanに入れます:

public class SomeBean {

    @Value("fooConfig.getStringArray('foo')")
    private String[] fooArray;
}

私はこれがうまくいくと信じています:P

于 2012-10-01T05:39:58.943 に答える
0

答え

@Value("#{'${my.list.of.strings}'.split(',')}") 
private List<String> myList; 

コンマ区切りの値に対して期待どおりに機能します。null (プロパティが指定されていない場合) を処理するには、以下のようにデフォルト値 (': 'プロパティ名の後に) を空の文字列として追加します。

@Value("#{'${my.list.of.strings: }'.split(',')}")
于 2021-05-12T17:26:42.847 に答える