2011-06-21 16 views
12

プロパティファイルをSpring Beanにロードし、そのBeanをクラスに挿入しようとしています。Spring&annotation @Valueを使用してプロパティを注入する

私が働くことができない唯一の部分は、@Resourceの参照を使用しているようです。誰かが私の最後の部分を接続することはできますか?私はいつもヌル値を取得します。値を注入したくないようです。

[編集] - 私はもともと@Resourceを使用していたと思っていましたが、私がより簡単に見つけた解決策でした。ポストのためのドンにInject Property Value into Spring - posted by DON

クレジットが、私はちょうど@Resourceでそれを終了する方法がわからなかった。

リファレンスソリューションのリンク:

は、私は別の記事で、このソリューションを見ました。

デバッグ結果: 変数値appPropertiesは常にnullです。それは注射されていません。

スプリングコンフィグ enter image description here

サンプルクラス:

package test; 

import java.util.Properties; 
import javax.annotation.Resource; 


public class foo { 
    public foo() {} 
    @Resource private java.util.Properties appProperties; 
} 

以下の承認溶液中の助言に基づいています。ここに私が行った変更があります。


ソリューション更新:

春コンフィグ: enter image description here

Javaクラス:あなたの仕事にあなたのソリューションのために enter image description here

+0

あなたのソリューションをしようとするとどうなりますか? – skaffman

+0

プライベート@Resourceプロパティはタイプミスですか? @Resource privateプロパティを試してみましたか?私はこのように動作してはいけないとは思っていませんが、私は改造者の前ではなく注釈を見たことがありません。 – abalogh

+0

@Skaffman - 私はヌル値を取得します。変数値はバインドされていません。 – haju

答えて

17

も春は管理対象Beanのfooを作成する必要があります。そうでなければSpringはあなたのクラスの注釈を処理しなければならないことをどのように知っていますか?

  • あなたは..class="foo"
  • を持つBeanとしてあなたAppContextをXMLでそれを指定するか、またはcomponent-scanを使用して、あなたのfooクラスが含まれているベースパッケージを指定することができます。

私は、これはあなたが(あなたが春で解析するの.properties ファイルをしたいし、それが代わりにPropertiesオブジェクトの利用できるキーと値のペアですがありませんしたい正確に何である全くわからないので?(また、春を管理する必要がある)util名前空間

<util:properties id="props" location="classpath:com/foo/bar/props.properties"/> 

を使用して、あなたの豆内部の値を参照します:

@Value("#{props.foo}") 
public void setFoo(String foo) { 
    this.foo = foo; 
} 

EDIT:

)、私はあなたに別の解決策を示唆しています

はあなたのクラスにorg.springframework.context.ApplicationContextをインポートしている可能性が高いことに気付きました。 a)それは素晴らしい読書だからです。b)基本が明確であれば、Springを理解するのがはるかに簡単であることが分かるでしょうから、少なくとも最初の数章でSpring referenceを読むことを強くお勧めします。

+0

ありがとうございます。私は haju

+0

コンポーネントスキャンで@Componentを使用しない最初の実装方法を選択した場合、スプリング設定で注入する必要があるため、@Valueをもう使用しません。 – haju

+0

また、上記の例で@Value、 "#{props.foo}"内に指定した値には、プロパティKEY自体のドット(この例では "foo")を含めないでください。私は古い学校の方法でELを使用するように移行していました。プロパティファイル内のキーはa.b.c = xyzなどの形式でしたが、失敗しました。一方、abc = xyzが働いたとします。 – arcseldon

3

プロパティプレースホルダを使用したもう1つのソリューション。

春コンテキスト:あなたはプロパティ値を挿入したい

<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.1.xsd"> 

    <context:component-scan base-package="your.packege" /> 

    <context:property-placeholder location="classpath*:*.properties"/> 

</beans> 

Javaクラス:

public class ClassWithInjectedProperty { 

    @Value("${props.foo}") 
    private String foo; 
} 
関連する問題