56

私が持っている場合:

@Autowired private ApplicationContext ctx;

getBean メソッドの 1 つを使用して、Bean とリソースを取得できます。ただし、プロパティ値を取得する方法がわかりません。

明らかに、次のような @Value プロパティを持つ新しい Bean を作成できます。

private @Value("${someProp}") String somePropValue;

Bean を自動配線せずにその値を取得するには、ApplicationContext オブジェクトでどのメソッドを呼び出す必要がありますか?

通常は @Value を使用しますが、SPeL 式を動的にする必要がある場合があるため、アノテーションだけを使用することはできません。

4

3 に答える 3

18

プロパティがPropertyPlaceHolderConfigurerからのものであると仮定すると${someProp}、それは物事を困難にします。PropertyPlaceholderConfigurerはBeanFactoryPostProcessorであるため、コンテナーの起動時にのみ使用できます。そのため、実行時にBeanがプロパティを使用することはできません。

解決策は、必要な1つまたは複数のプロパティで初期化するある種の値ホルダーBeanを作成することです。

@Component
public class PropertyHolder{

    @Value("${props.foo}") private String foo;
    @Value("${props.bar}") private String bar;

    // + getter methods
}

次に、プロパティが必要な場所にこのPropertyHolderを挿入し、getterメソッドを介してプロパティにアクセスします。

于 2012-05-30T19:56:06.663 に答える