2011-07-27 12 views
1

私はapplicationContext.xmlでそれをしたので、アプリケーションの起動時にBeanを初期化する必要がありました。しかし、私は実行時に作成されたオブジェクトにそのBeanを注入する必要があります。例:Spring - 実行時に何度も作成されるクラスにBeanを挿入する方法は?

Servlet

... 
void doPost(...) { 
    new Handler(request); 
} 
... 

Handler

public class Handler { 

    ProfileManager pm; // I need to inject this ??? 

    Handler(Request request) { 
     handleRequest(request); 
    } 

    void handleRequest(Request request) { 
     pm.getProfile(); // example 
    } 
} 

答えて

2

さらに、ハンドラをBeanとして宣言し、ProfileManagerがすでに宣言されていることを前提にして、アプリで注釈を使用している場合は注釈@Autowiredを使用してHandler BeanのProfileManagerを自動生成します。 applicationContext.xml内にあります。 XMLでそれを行う方法の例は次のようになります。

<bean id="profileManager" class="pckg.ProfileManager" /> 
<bean id="handler" class="pckg.Handler" > 
<property name="pm" ref="profileManager" /> 
</bean> 

あなたは豆は、あなたがそうであるように、それをインスタンス化し、春のApplicationContextのから午後インスタンスを取るようハンドラを登録したくない場合。 Webアプリケーション内のApplicationContextを取得する方法の方法がhere

+0

良い点。私はそれについて考えていて、あなたが言うようにHandlerを一度だけ作成することに決めました。ありがとう – user219882

+0

うれしい私は助けることができました! – gred

1

は遅延し、それらを初期化し、スプリングBeanとしてHandlerProfileManagerを宣言する。それらを注入しないでください。new Handler() Springにこれをさせてください。

1

まず「Handler」が何度もintilial化されているのでしょうか。実行時にBeanを使用してメソッドを複数回呼び出すことは、この例でも同様です。

それ以外に、Bean自体のアスペクトを使用できます。そこにProfileManagerを注入し、Aspectがハンドラの作成に取りかかり、pmを設定します。

1

を示している私はあなたが本当に春がHandlerの作成を処理させるべきであるが、それはオプションではありませんならば、あなたにProfileManagerを注入できることを知らせる他の回答に同意しますServletを作成し、Handlerを作成するときにコンストラクタに渡してください。

関連する問題