0

スケジューラジョブによって制御されるポーリングフィルタクラス(FClass)にSpring Beanを注入することは可能ですか?ここでシングルトンがどのように適用されるのかよくわかりません。

春の豆はシングルトンであることを理解しているので、春の豆をクラスFClassに注入するために。FClassをBeanとして定義し、DIをプロパティなどとして追加する必要があります。

では、FClassがシングルトンである必要があるかどうかをどのように知ることができますか?シングルトンであるクラスのみを作成してBeanを作成し、それらに対してDIを実行できると思います。

私の問題は:

ファサードBeanxfacadeをFClassに注入できる必要があります。x_facacdeはdaoオブジェクトを処理します。Y_daoとZ_hibernateセッションBeanがDIとして注入されています。

StatusPollingFilter(FClass)のスプリングBeanを作成し、ファサードBeanを注入しようとすると、nullが発生し、デバッグモードで注入のためにセッターが呼び出されることはありません。

問題:StatusPollingFilterのスレッド/スケジューラーの性質に関係している可能性があると思います。SpringBeanはシングルトンであるため、そのために機能しない可能性があります。

StatusPollingFilter(FClass)のファクトリを作成することを考えています。しかし、これが正しいことであるかどうかを知る必要があります。問題がどこかにある可能性があるため、あまりにも多くの作業を行い、それでも機能しないことに気付く前に、私は正しい方向に進んでいます。理想的には、可能な限り最も簡単な方法でテーブルを更新したいだけです。しかし、DAOが存在するため、Hibernateを使用する必要がありますが、Hibernateは

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
 with /hibernate/TopoObject.hbm.xml

ファイル。

したがって、これをどのように試しても、セッションまたは挿入されたファサードBeanで常にnullポインター例外が発生します。ここでQAの一部を読み取ると、StatusPollingFilterがスケジューラーを使用してインスタンス化され、スプリングではなく、DIBeanを認識できないためのように見えます。上記のファクトリパターンはここで役立ちます。

私は追加の問題を抱えているかもしれませんが、私がそれに来るとき、私はその橋を渡ります。しかし、簡単に言うと、誰かが私が遭遇する可能性のある問題を知っている場合に備えて...スケジューラがインスタンスのファクトリを呼び出す方法/方法がわからない-すべてがサードパーティのAPIによって制御されている-これはStatusPollingFilterを呼び出しますが私は ' mファクトリをクラスおよびパラメータとして渡すと、それが通り抜けると仮定します...しかし、最初の部分が主な質問です。後者のワッフルは無視してください。前もって感謝します。

4

2 に答える 2

0

続きを読む-私はansに出くわしました。StatusPollingFilterオブジェクトはスケジューラーの制御下にあるため(スケジューラーがそれと関係があることを知っていました)、Spring Beanを認識していません。そのため、Beanを注入しようとするとnullが発生し続けます。

私はクラスを作成しました:

 ApplicationContextProvider implements ApplicationContextAware

静的アクセスを追加

private static ApplicationContext   appContext;

それのためにセッターをしました:

public void setApplicationContext(ApplicationContext context)
{
    appContext = context;
}

と追加

public static Object getBean(String beanName) throws BeansException
{
    return appContext.getBean(beanName);
}

コードで使用される:

EvoTAMDAOFacade evoDao = (EvoTAMDAOFacade) ApplicationContextProvider.getBean("evoDaoFacade");

これで、ファサードBeanとファサードに注入されたすべてのBeanにアクセスできます。まだ休止状態のセッションに問題がありますが、他の問題が原因である可能性があります。

ここでのptは、スプリングコンテナを制御していないため、Beanにアクセスできないため、何らかの方法でBeanを取得する必要がありました。おそらく、ファクトリメソッドを介して実行できたはずですが、もっと簡単な方法があると、どうして混乱するのでしょうか。私の問題を投稿したり理解しようとした人の助けに感謝します。

于 2013-03-14T15:55:47.387 に答える
0

実際 :

シングルトンであるクラスのみを作成できると仮定します

あなたが間違っているところです。Bean は、Spring にインスタンス化させる単なるクラスです。デフォルトでは、それらはシングルトンとして作成されますが、属性を使用して Bean のスコープを指定できますscope(驚くべきことに)。指定できる値は、こちらのドキュメントで指定されている値です

したがって、注意しなければならないことの 1 つは、スコープがシングルトンprototypeまたはrequestシングルトンの Bean のインジェクションです。

于 2013-03-13T20:07:23.883 に答える