web-dev-qa-db-ja.com

Springに静的定数の値を挿入する

私のクラスの1つにpublic static Stringメンバーがあり、この値をapplicationContext.xmlに設定する必要があります。つまり、この静的プロパティに値を挿入することは可能ですか?

14
Shyam
11
JoseK

いいえ、XMLコンテキストから静的フィールドに値を挿入することはできません。

クラスを変更できる場合は、次の簡単な選択肢があります。

  • 静的モディファイヤを削除し、フィールドの上に@ Inject/@Autowireを追加します
  • コンストラクター/セッター/ initメソッドを追加します。

それ以外の場合は、SpringのJava構成サポートを使用して実行できます。

例:

静的フィールドと、Springコンテナが必要な値を静的フィールドに挿入することを表明するJUnitメソッドを持つDemoクラス:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("test-context.xml")
public class Demo {

    public static String fieldOne;

    @Test
    public void testStaticField() {
        assertEquals("test", fieldOne);     
    }
}

ApplicationContextおよびcomponent-scan要素にコンテキスト名前空間を追加します。

<context:component-scan base-package="com.example" />

次のような静的フィールドを使用してBeanを追加します。

@Configuration
public class JavaConfig {

    @Bean
    public Demo demo() {
        Demo.fieldOne = "test";

        return new Demo();
    }
}

この場合、JavaConfigクラスは、component-scan要素で宣言されているcom.exampleパッケージに含まれている必要があります。

4
Espen