1

私のコードの目的は、*.properties ファイルからいくつかの設定値をロードして、後でコード内のいくつかの if ステートメントでこれらの値を使用できるようにすることです。リスト構造でロードしたいのですが、難しそうなので配列でいいと思います。プロパティ ファイルから文字列を読み込むという些細な問題に行き詰まっているので、そこまでは行きませんでした。

スプリング固有のデータを使用しているコードをデバッグしようとすると。ブレークポイントのすぐ上のコードの定義をポイントすると、変数値が null であることがわかります。

@Value(value = "${ViewableReportFilter.allStates.verify}")
String verifyStringStates;

public ViewableReportFilter() {
    viewStates = null;
    log.debug("Read in properties for states: verify:" + verifyStringStates);

     /*BREAKPOINT HERE*/

私の my.properties ファイルで:

ViewableReportFilter.allStates.verify=ONHOLD

そして、プロパティファイルを使用するための私の設定:

<context:property-placeholder location="classpath:properties/my.properties" order="1" ignore-unresolvable="true" />
4

3 に答える 3

0

オブジェクトが作成される前に、Spring はオブジェクトのフィールドを設定できません。Spring が最初に行うことは、リフレクションを使用してクラスをインスタンス化することです。コンテキストに応じて、どちらClass#newInstance()かを使用するか使用します。Constructor#newInstance()コンストラクターが作業を終了して戻ったときにのみ、Spring は再びリフレクションを使用してフィールドの値を設定できます。

別の方法は@Value、コンストラクターのパラメーター リストに注釈付きパラメーターを配置し、Spring によって与えられた引数からコンストラクター内にフィールドを設定することです。

public ViewableReportFilter(@Value String verify) {
    this.verifyStringStates = verify;
    ...

その IoC コンテナーについては、Spring のドキュメントを参照してください。このすべてを詳細に説明しています。

于 2013-10-25T12:55:47.090 に答える
0

これを使用してみてください:

@Value(value = "${allStates.verify}")

そして、あなたのプロパティ my.properties で:

allStates.verify=ONHOLD

于 2013-10-26T08:22:11.467 に答える
0

コンストラクターを更新し、Autowire アノテーションを追加しました。プロパティ ファイルに変更はなく、XML もありません。

String arrayOfStrings;

@Autowired
public ViewableReportFilter(
        @Value("${TMSViewableReportFilter.allStates.verify}") String[] verifyStringStates) {
        arrayOfStrings = verifyStringStates;


public logViewableReportFilter() {
    log.debug("Read in properties for states: verify:" + arrayOfString);
}
于 2013-10-25T15:52:49.963 に答える