Бесконечный цикл при использовании wicket-guice - PullRequest
0 голосов
/ 03 февраля 2012

я пользуюсь калиткой уже пару месяцев, и недавно я начал использовать wicket-guice.Так что я довольно хитрый noobie:)

Каждая страница имеет ServiceClass (давайте назовем его DoService), который управляет несколькими объектами (то есть, пользователем) ... Эти объекты также по некоторым причинам получили ссылку на этот ServiceClass.

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

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

public class User {
   @Inject
   private DoService doService;
}

Я не совсем уверен, но я думаю, что следующее исключение происходит из-за циклических ссылок на зависимости, хотя я думал, что guice управляет всем этим самостоятельно.

Что бы ни ....Если вам нужна дополнительная информация, чтобы понять мою проблему, пожалуйста, спросите :)

Заранее спасибо

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 ]

2 голосов
/ 03 февраля 2012

Мне кажется, ваш дизайн неверен: доменный объект не должен содержать ссылок на сервисы. У вас действительно есть круговая зависимость.

0 голосов
/ 05 февраля 2012

Что делает здесь Guice, так это создает новый экземпляр User для каждого экземпляра DoService и новый экземпляр DoService для каждого экземпляра User.Я не думаю, что это то, что вы хотите архивировать здесь (кроме сомнительного дизайна).Существует несколько способов решения этой проблемы:

  1. Использование соответствующих провайдеров в вашем модуле
  2. Использование одноэлементной области действия в подсказке
  3. Использование подсказки только для одного из этих случаев.Пусть один объект создаст другой и предоставит себя конструктору другого для обратной ссылки.
...