Wicket @SpringBean не создает сериализуемый прокси - PullRequest
3 голосов
/ 28 декабря 2010
@SpringBean
PDLocalizerLogic loc;

При использовании выше я получаю исключение java.io.NotSerializableException.Это потому, что loc не сериализуем, но это не должно быть проблемой, потому что Spring bean-компоненты являются сериализуемыми прокси.Я использую библиотеку wicket-spring и в качестве инжектора SpringComponentInjector, где wrapInProxies по умолчанию имеет значение true, поэтому я думаю, что прокси должны быть созданы, но это не так.

На странице https://cwiki.apache.org/WICKET/spring.html#Spring-AnnotationbasedApproach написано:

Используя подход, основанный на аннотациях, вы не должны беспокоиться о сериализации / десериализации введенных зависимостей, так как это обрабатывается автоматически, зависимости представлены сериализуемыми прокси

Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 19 января 2011

Знаете ли вы, как вводится bean-компонент?

  1. Посредством инициализации компонента (т. Е. Компонента и заполнения SpringComponentInjector)
  2. Какой-то другой объект, использующий InjectorHolder.getInjector() .inject (this)?
  3. Впрыскивается напрямую пружиной (т. е. это bean-компонент пружины, свойство которого задается конфигурацией Spring)

В случаях 1 и 2 будут использоватьсяинтеграция с калиткой и пружиной и обернут бин с помощью прокси-сервера калитки, который можно сериализовать.Случай 3 предоставит вам только то, что пружина проходит без упаковки.

2 голосов
/ 28 декабря 2010

Во-первых, убедитесь, что ваш бин действительно прокси. По умолчанию Spring не создает прокси.

Во-вторых, проверьте свою стратегию прокси - будь то proxy-target-class="true" или нет. Если это false, (afaik) ссылка на ваш объект сохраняется в обработчике вызова прокси-сервера JDK и пытается сериализоваться.

Так что вам нужно будет также сделать свой класс Serializable, если он вам нужен.

1 голос
/ 28 декабря 2010

Можете ли вы дважды проверить, что прослушиватель экземпляров добавлен в ваш класс приложения:

addComponentInstantiationListener (new SpringComponentInjector (this));

Кроме того, это работает только для полей в компонентах Wicketне произвольные классы.

См. также wicket @SpringBean не может создать компонент

...