2012-11-22 12 views
9

私のコードでBeanのインスタンス化の例外をキャッチしたい。どのようなオプションがありますか?これを行うための 一つの方法は、Javaベースのコンテナ設定を使用することです:SpringキャッチBean作成例外

@Configuration 
public class AppConfig { 
    @Bean 
    public SomeBean someBean() { 
    try { 
     return new SomeBean(); // throws SomeException 
    } catch(SomeException se) { 
     return new SomeBeanStub(); 
    } 
    } 
} 

は、可能なXMLベースまたは注釈ベースの設定を使用して春を使用した豆のインスタンス化の例外ハンドラを定義することですか?

+0

あなたはそれを行う方法を見つけましたか?私はそれをキャッチし、プロセスを殺す、サーバーがそれをすべてロードさせないようにしたいと思います。私の問題は、一部のBeanが正しくロードされていないが、他のBeanが正しくロードされていないと、一貫性のない動作が発生することです。 –

答えて

0

あなたはそうしないと思います。それがSpringがあなたのためにBeanを作成することの要点です。 new(上記と同じ)を使用して独自のBeanを作成する場合は、Springを使用してBeanを作成する理由を教えてください。

あなたは自分のためにオブジェクトを割り当てて、依存性注入とすべてではなく一緒に作業できます。

私は質問の背後にある本質を理解していますが、私はそれがサーバーの読み込み時間中に失敗した場合に最適だと思います。理由:アプリケーションが矛盾した状態になることはありません。例外をキャッチして清潔さを取ると仮定しますが、他のクラスは存在しないBeanが存在することを期待しています。

したがって、アプリケーションが一貫しているように、初期化時に失敗するのが最良です。私は他の正当なやり方を知らないのですが。

+0

ありがとうございます。問題のコンテキストは次のとおりです。Beanのインスタンス化中に何らかの問題が発生した場合(データベース障害、別の外部エラー)、保守モードに切り替える必要があります。 Bean作成の例外を捕まえることなく、不可能です。ラッパーがここでどのように助けてくれるかもっと詳しく教えてください。 – khachik

+1

答えを編集しました: – Jatin

2

完全性のためです。

また、最初にBeanを使用したときにBeanを初期化して例外をキャッチすることもできます。

春の設定:Javaで

<bean id="a" class="A" lazy-init="true" /> 

import org.springframework.beans.factory.BeanCreationException; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Lazy; 

public class B { 

    @Autowired 
    @Lazy 
    A a; 

    public void foo(){ 
     try{ 
       a.foo(); 
     } catch (BeanCreationException e){ 
       // ignore if you want 
     } 
    } 
} 
8

方法someBeanSomeExceptionをキャッチして、原因としてSomeExceptionBeanCreationExceptionをスローする必要があります場合は

@Configuration 
public class AppConfig { 
    @Bean 
    public SomeBean someBean() { 
    try { 
     return new SomeBean(); // throws SomeException 
    } catch (SomeException se) { 
     throw new BeanCreationException("someBean", "Failed to create a SomeBean", se); 
    } 
    } 
} 
+0

これは正しい方法です。 – Alex

0

あなたの場合されている間の失敗を期待する@Beanメソッド本体ですべての失敗例外をキャッチし、nullを返すことでBeanの作成が​​失敗したことを示すことで、アプリケーションの残りの部分(非常に正当な状況)での作成とBeanは必須ではありません。 この場合、BeanはSpringアプリケーションコンテキストに追加されず、指定されたBeanに必須の依存関係がない場合にコンテキスト構築が成功します。

関連する問題