web-dev-qa-db-ja.com

Spring 3.0.5はプロパティの@Valueアノテーションを評価しません

Spring 3.0.5.RELEASEでBeanにプロパティを自動ワイヤリングしようとすると、次のように使用します:

  • config.properties

    username=myusername
    
  • main-components.xml

    <context:property-placeholder location="classpath:config.properties" />
    
  • 私のクラス:

    @Service
    public class MyClass {
    
        @Value("${username}")
        private String username;
        ...
    }
    

その結果、ユーザー名は文字通り"${username}"に設定されるため、式は解析されません。このクラスに対する他の自動ワイヤード依存関係が設定され、Springは例外をスローしません。 @Autowiredも追加しようとしましたが、効果がありませんでした。

プロパティを個別のBeanに解析してから@Autowired + @Qualifierを使用すると、機能します。

<bean id="username" class="Java.lang.String">
    <constructor-arg value="${username}"/>
</bean>

@Valueの使い方のアイデアはありますか?たぶん、私が持っていないいくつかのSpring依存関係を含める必要がありますか?ありがとうございました

30
Alex Yarmula

問題が何であるかを見つけました。コメントからコピー/貼り付け:

<context:property-placeholder>(親コンテキストではなく)MyClass Beanと同じアプリケーションコンテキストで? – axtavt

あなたが正しい。引っ越した <context:property-placeholder>は、ContextLoaderListenerによって定義されたコンテキストからサーブレットコンテキストへ。これで私の値が解析されます。どうもありがとう! -アレックス

20
Alex Yarmula