4

うまく機能するSpring構成ファイルを作成しました。

次のステップは、ユーザー構成プロパティをシステムプロパティから分離することでした。

ユーザーが構成するBeanを使用して追加のxmlファイルを作成することにしました。

実際のクラスのBeanで使用されるプロパティをカプセル化するような論理Beanをいくつか作成するのに問題がありました。

私はネット上でそのような方法で財産を参照するオプションを見つけました:

UserConf.xml

<bean id="numberGuess" class="x...">
    <property name="randomNumber" value="5"/>

    <!-- other properties -->
</bean>

SystemConf.xml

<import resource="UserConf.xml" />

<bean id="shapeGuess" class="y...">
    <property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>

    <!-- other properties -->
</bean>

しかし、私の問題は、x...クラスがまったく初期化されるべきではない論理的なものである必要があり、システムのクラス階層の情報を開示したくないということです。これは、構成xmlファイルのみを使用する必要があるためです。

Solution1は、このプロパティを表すJavaオブジェクトを作成することです。

public class MyProps(...)

そして、Springシステム構成にBeanの親を追加します。

<bean id="MyProps" class="path to MyProps"/>

ユーザー側で、前のBeanを次のように変更します。

<bean id="numberGuess" parent="MyProps">
    <property name="randomNumber" value="5"/>

    <!-- other properties -->
</bean>

Solution2は、Database.propsと同じようにフラット構成ファイルを使用し、ファクトリを使用してロードすることです。

Solution3は、Spring Property Placeholder構成を使用してXMLプロパティファイルからプロパティをロードすることです()が、ここでは、プロパティのより複雑なネストされた構造を取得する方法がわかりません(プロパティは異なる論理名で区切る必要があります。 minNumberは、xAlgoとyalgoの両方で定義されます)。

この問題に対処するため、またはユーザー構成をフラットな小道具ファイルに移動するためだけに新しいJavaクラスを作成するのは好きではありません(xml構造が必要です)、他の解決策はありますか?

4

2 に答える 2

3

私自身の質問に答えます。それは私にとって最良の解決策のように見えるからです(そして提案されたよりもはるかに単純です)

PropertiesFactoryBeanを使用して作業を行います。

例えば

UserConf.xml

<bean id="numberGuess" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="properties">
    <props>
        <prop key="randomNumber">3</prop>

    <!-- other properties -->
</bean>

SystemConf.xml

<import resource="UserConf.xml" />

<bean id="shapeGuess" class="y...">
    <property name="initialShapeSeed" value="#{ numberGuess.randomNumber }"/>

    <!-- other properties -->
</bean>
于 2013-01-10T15:49:26.147 に答える
1

まず、プロパティのプレースホルダーについて知らない場合は、それを確認してください。また@Value("${some.property:defaultvalue}")、あなたが見なければならないものです。

次に、 Spring では構成という言葉があいまいです。Spring はこの言葉を使用しますが、ユーザー構成ではなく開発者構成を意味します。人々が何と言おうと、どう考えようと、Spring は構成エンジンではありません。

何をしようとしているのかはわかりませんが、実行時に設定が調整されないことに注意してください。これは、「user」設定などで頻繁に必要になります。そのため、ほとんどの人は独自の構成レイヤーを作成します。

もう 1 つ注目すべき点は、XML 構成を使用せず、代わりにJava 構成を使用することです。これにより、柔軟性が向上します。

于 2013-01-10T14:59:50.467 に答える