2009-11-16 6 views

答えて

0

プロパティ構文を使用してBean定義ファイルから明示的に値を注入することで、それを動作させることができましたか?理論的には、それがうまくいくなら、@Valueに同じ式を使うことができるはずです。その点については、@Autowired @Qualifierも使用できるはずです

0

@Value注釈でSPELを使用してPropertyPlaceHolderConfigurerによってロードされたプロパティにアクセスすることはできないと思います。それは素晴らしいことだが、私の知る限り、次善の策は、宣言することです:

<util:properties id="props" location="classpath:xxx/yyy/app.props"/> 

それは同じ性質を指すことができますが、あなたのPropertyPlaceHolderConfigurerとして提出します。

+1

することができますを使用して、このアプローチをテスト済み

app.value=Injected 

アプリ-のcontext.xml

<bean id="propertyConfigurer" class="MyPropertyPlaceholderConfigurer"> <property name="location"> <value>file:app.properties</value> </property> </bean> 
ターゲットBeanで

@Value(value="${app.value}") private String injected; 

独自のPropertyPlaceHoldeを作成するそのプロパティを公開するrConfigurerこの例はここにあります:http://mortarproject.svn.sourceforge.net/viewvc/mortarproject/src/trunk/mortar-core/src/main/java/org/mortar/spring/beans/factory/config /EnhancedPropertyPlaceholderConfigurer.java?revision=70&view=markup新しいの代わりに古いを使用して登録する必要がありますので、IDを設定してから(#{xxx.properties ['foo.bar']}) – pakman

+0

私はあなたがxxx.propertiesファイル名を入れる必要はないと思っています。スプリングはすべてのプロパティファイルをロードします。あなたのキーは、すべてのプロパティファイル間で一意です。 – Ashish

+0

これは間違っています。 Spring 3では、SPELを使用してPropertyPlaceHolderConfigurer値にアクセスできます。 –

15

古い質問ですが、それでも解決する価値があります。式は元のPropertyPlaceholderConfigurerと同じ方法で使用できます。

app.properties春3.0.6

+0

余分な#{...}は無用です(静的な文字列のSpEL評価を行います)。 Spring 3.x以降、$ {app.value}構文は@Valueアノテーションでサポートされていて、プロパティを挿入するために使用できます(しかし、この質問に尋ねられたときではないでしょう)。 – MikeN

+0

余分な#{...}についてあなたは正しいです。これを省略すると、同じ結果が得られます。私はそれを取り除くために私の答えを修正します。 – micfra

関連する問題