2011-12-08 7 views
1

POJOからSpring appcontext.xmlに値をロードする方法はありますか?POJOからAppコンテキストへのSpringロード値

は例えば、私のようなものであるPOJO、

public class Settings { 
    private String appSetting; 
    getMethod; 
    setMethod; 


public class Main { 
    @Autowired 
    private Settings setting 

    @Autowired 
    private SomethingElse somethingElse 
} 

そして、最終的な目標を持って、私は設定から​​値をautowired somethingElseをしたいということです。私はあなたが春のメソッドを呼び出すことができないと信じて以来、これを行う方法はありますか?春のマニュアルから

例AppContextを

<bean id="settings" class="com.myCom.settings" /> 

<bean id="somethingElse" class="com.myCom.somethingElse" /> 
    <constructor-arg name="something" value="VALUE FROM SETTINGS.GET" /> 
</bean> 

答えて

1
@Component 
public class Settings { 

チェックClasspath scanning and managed components

更新 SpELも使用できます。 applicationContext.xml@Autowiredを混在させることもできます。名前やタイプで配線することもできます。

+0

私はアプリコンテキストのために作成しましたを参照してください。 @Componentを使用して値を取得するにはどうすればよいですか?私はマニュアルを読んでいますが、私が探しているものを達成する方法を理解できていないようです。私はそれが新しい@Valueアノテーションのように感じたいと思っていますが、わかりません。 –

+0

SpELへのリンクを追加しました。 :)あなたのユースケースに応じて、 '@ Value'も同様に動作します。あなたは '@ Value'アノテーションのためにSpELを必要とするでしょう。 –

+0

SpELはトリックをやった:) –

1

アプリケーションコンテキストにSettingsコンポーネントを登録してから、SomethingElseクラスのインスタンスを生成するファクトリである第3のクラスを作成できます。その後、SomethingElseクラスのインスタンスを構築するときに必要な値を取得できるように、設定コンポーネントをファクトリに配線できます。

<bean id="mySettings" class="Settings"> 
    <property name="importantValue" value="whatever" /> 
</bean> 

<bean id="mySomethingElseFactory" class="SomethingElseFactory"> 
    <property name="settings" ref="mySettings" /> 
</bean> 

最後に、あなたがこのようなファクトリメソッドから派生Beanとしてアプリケーションコンテキスト内SomethingElseコンポーネントを初期化できます:

​​

それは第三のファクトリクラスを作成する必要がなく、できるようになります。このようあなたはあなたが必要とすることをする。

0

私はこれを試していませんが、PropertyPathFactoryBeanが役立ちます。あなたは@Componentでpojoに注釈を付けることができ、それにアクセスするために "settings"という名前を使用するか、完了した後に設定ファイルにBeanを定義することができます。

この後、PropertyPathFactoryBean経由でプロパティを「somethingElse」にプッシュします。説明はhereで提供されています。

0
<bean id="settings" class="com.myCom.settings" /> 

<bean id="somethingElse" class="com.myCom.somethingElse" /> 
    <constructor-arg name="something" value="#{settings.something}" /> 
</bean> 
関連する問題