2012-02-03 14 views
0

im最近数ヶ月と私は最近wicket-guiceを暴き始めたので、wicketを使用しています。 だから、イムかなりGuiceのnoobie :)wicket-guiceを使用しているときの無限ループ

すべてのページがServiceClassを持って... これらのオブジェクトはまた、いくつかの理由からそのServiceClassへの参照を持ったオブジェクト(つまりユーザー)の数を管理する(それDoServiceを呼び出すことができます) 。

public class page ... { 
    @Inject 
    private DoService doService; 
} 

public class DoService ... { 
    private Collection<User> ... 
} 

public class User { 
    @Inject 
    private DoService doService; 
} 

イムかなり確実ではないが、私はGuiceのすべてのitsselfことで、これを管理して考えても、次の例外が依存関係の循環参照の原因を発生すると思います。

どのような.....あなたは私の問題を理解してplsは:)

を依頼するより多くの情報が必要な場合は、事前

java.lang.StackOverflowError 
    at java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:54) 
    at WICKET_....DoService$$FastClassByCGLIB$$ce256f9.invoke(<generated>) 
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) 
    at org.apache.wicket.proxy.LazyInitProxyFactory$CGLibInterceptor.intercept(LazyInitProxyFactory.java:317) 
    at WICKET_....DoService$$EnhancerByCGLIB$$d1f8934e.rollback(<generated>) 
    at WICKET_c....DoService$$FastClassByCGLIB$$ce256f9.invoke(<generated>) 
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) 
...... 

答えて

2

のおかげで、私はあなたのデザインが間違っていると思う:ドメインオブジェクトが含まれているべきではありませんサービスへの参照。あなたは本当に循環依存を持っています。

+0

こんにちは、これはDOデザインではありませんが、私は簡単な例を提供したいと思います。実際のアプリケーションでは、バックリファレンスが重要です:( –

+1

バックリファレンスが重要な場合は、デザインを再検討することは悪い考えではないかもしれません。 。 –

+0

こんにちは、あなたの返信をもう一度感謝します。いくつかのさらなる調査の後で、それはエラーが全く異なる問題によって引き起こされたことを示しました。実際にwicket-guiceはプロキシオブジェクトを使って作業しています。これらのプロキシはスレッドローカルにアタッチされており、この依存関係が次に注入されると、このプロキシのプロキシはwicket-guiceによって作成されました。 –

0

ここでGuiceはすべてのDoServiceインスタンスに対して新しいUserインスタンスを作成し、すべてのUserインスタンスに対して新しいDoServiceインスタンスを作成します。私はあなたがここにアーカイブしたいと思うものではないと思います(疑わしいデザインは別として)。 Guiceの中にあなたのモジュールで

  1. を使用して、適切なプロバイダ
  2. 使用シングルトン範囲のみこれらinstanciationsのいずれかの
  3. 使用Guiceの: この問題の周りのいくつかの方法があります。一方のオブジェクトにもう一方のオブジェクトを作成させ、逆参照のために他方のオブジェクトのコンストラクタに自身を提供します。
関連する問題