2

春の豆の定義に奇妙な問題があります。私のアプリケーションはマルチモジュールのものです。現在、core-libという名前のプロジェクトがあります。このプロジェクトには、次のようにPropertyPlaceholderConfigurerを定義するspring.xmlファイルがあります。

<bean id="corePropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="order" value="10" />
    <property name="locations">
        <list>
            <!-- default properties files containing ALL possible properties -->
            <value>classpath:default.connection.properties</value>
            <value>classpath:default.mq.properties</value>
            <!-- installation specific, optional properties file containing overridden properties -->
            <value>classpath:connection.properties</value>
            <value>classpath:mq.properties</value>
        </list>
    </property>
    <property name="ignoreResourceNotFound" value="true" />
</bean>

次に、core-libプロジェクトからのものを含む独自のspring.xmlファイルを持つ依存プロジェクトがあります。さらに、次のように2番目のPropertyPlaceholderConfigurerを定義します。

<!-- import configuration from service layer -->
<import resource="classpath:spring.xml"/> 


<bean id="commPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="order" value="20" />
    <property name="locations">
        <list>
            <!-- properties files containing ALL possible properties -->
            <value>classpath:processing.properties</value>
        </list>
    </property>
    <property name="ignoreResourceNotFound" value="true" />
</bean>

これで、この2番目の春のPlaceholderConfigurerで定義されたBeanが、プロパティが欠落しているためにインスタンス化できないという動作があります。

BeanDefinitionStoreException:クラスパスリソース[comm-server.spring.xml]で定義された「commServer」という名前の無効なBean定義:プレースホルダー「comm.server.CommServer.port」を解決できませんでした

PropertyPlaceholderConfigurerクラスにブレークポイントを設定すると、最初のBeanインスタンスに対してのみトリガーされ、2番目のBeanインスタンスに対してはトリガーされません。誰かが同様の設定をしていて、私にアドバイスを与えることができますか?

ありがとう、

セバスチャン

4

2 に答える 2

0

OK私はそれを自分で解決しましたが、なぜこれがそれほど奇妙に機能しているのかわかりません。2番目のプレースホルダー($ {の代わりに?{)に別のプレフィックスを定義しましたが、現在は機能しています。私はこれが特別なプレフィックスなしで機能することを期待していました...

于 2012-08-28T15:31:47.083 に答える
0

新しいプレースホルダーのプレフィックスとサフィックスを定義することで、より快適な方法があります。

<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location">
    <value>classpath:configuration.properties</value>
  </property>
  <property name="placeholderPrefix" value="myprefix{" />
  <property name="placeholderSuffix" value="}" />
</bean>

ここにあります:http://javalibs.blogspot.co.at/2008/04/java-spring-framework-multiple.html

于 2013-08-02T12:59:16.520 に答える