31

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は文字通り "${username}"に設定されるため、式は解析されません。このクラスに対する他の自動配線された依存関係が設定され、Springは例外をスローしません。私も追加しようとしまし@Autowiredたが、役に立ちませんでした。

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

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

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

4

1 に答える 1

22

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

<context:property-placeholder>MyClass Beanと同じアプリケーションコンテキスト(親コンテキストではない)を使用していることを確認しますか?– axtavt

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

于 2011-03-11T16:55:14.280 に答える