2012-01-26 4 views
9

私は、春の構成ファイルを持つWebアプリケーションを持っています。Beanの初期化時にSpringがブートストラップを中止しないコンポーネントのスキャンが有効なときにエラーが発生しましたか?

<bean id="flyway" class="xxx.FlywayTool" init-method="migrateOrFail"/> 

私は、アプリケーションが使用するデータソースを定義する別のBeanを持つBeanがdatabase.Nowを初期化し、移行するために使用されている「フライウェイ」:

<bean id="dataSource" class="..." depends-on="flyway"> 

この1つは異なり、私は次のエントリを持っています飛行機で成功する。

すべて正常です。今、 "飛行経路" Beanが例外をスローすると、スプリングストップのブートストラッピングとwebappの起動が完了しました。

私も、XML構成で豆のように定義されているサービスに依存するクラスの一部で
<context:component-scan base-package="de.xxxxx.xxxxx" /> 

今私は経由して特定のコンポーネントのためのオートワイヤリングを有効にし始めています。私は上記のデータソースに依存しています。今

問題は:

org.springframework.beans.factory.support:できるだけ早く私は今、アプリケーションをブートストラップし、「フライウェイ」として例外は、次のセクションでは、スプリングによって飲み込まれる例外をスローしています。 AbstractBeanFactory.getTypeForFactoryBean(文字列、RootBeanDefinition)

catch (BeanCreationException ex) { 
    // Can only happen when getting a FactoryBean. 
    if (logger.isDebugEnabled()) { 
     logger.debug("Ignoring bean creation exception on FactoryBean type check: " + ex); 
    } 
    onSuppressedException(ex); 
    return null; 
} 

、今、他のすべてのdependendサービスのための春の試行は、(つまり、データソースに依存し、したがって、フライウェイ)、再びターン結果で同様の手順ですべてのBeanを初期化し、再び。

この例外的なループは、最初のフライウェイエラー後に中止するのではなく、すべての可能性のある依存関係をインストールしようとするまで終了します。

最初のフライウェイ・エラーが起こった後に、この機能が無効になって春が停止したとき、私は

<context:component-scan .... 

を経由してコンポーネントのスキャンを有効にすると、この奇妙な動作にのみ開始します。それはまた別のクラスで終わる:

org.springframework.context.support.AbstractApplicationContext.refresh()

 catch (BeansException ex) { 
      // Destroy already created singletons to avoid dangling resources. 
      destroyBeans(); 

      // Reset 'active' flag. 
      cancelRefresh(ex); 

      // Propagate exception to caller. 
      throw ex; 
     } 

ので、これは私があまりにも他の場合に期待される動作です。

私たちの春バージョン:3.0.6.RELEASE

この動作はまた、任意のランタイムexecptionを投げ、他のクラスと存在しているが(ちょうどフライウェイではない)これはバグや予想される動作でありますか?

任意のヘルプ高く評価

マルセル

+7

XMLファイルにBean宣言の後に '

+0

うわー、それはうまくいくようです。あなたはバグを開くべきだと思う?またはこの意図された動作ですか? – Marcel

+0

この機能を使用すると、アノテーション駆動型設定をXML設定で上書きできるため、意図した動作です。 –

答えて

1

nico_ekitoはコメントで言ったように、あなたのXMLファイルで、あなたの豆宣言の後<context:component-scan...を置きます。動作確認

マルセルは:うわー、それは動作するようです。あなたはバグを開くべきだと思う?またはこの意図された動作ですか?

関連する問題