Wicket @SpringBean不会创建可序列化代理

时间:2010-12-28 08:49:54

标签: java spring wicket

@SpringBean
PDLocalizerLogic loc;

使用上面的时候,我会收到java.io.NotSerializableException。这是因为loc不可序列化,但这不应该是问题,因为spring bean是可序列化的代理。 我正在使用wicket-spring库,并且作为注入器SpringComponentInjector,其中wrapInProxies默认设置为true,所以我认为应该创建代理,但它们不是。

在页面https://cwiki.apache.org/WICKET/spring.html#Spring-AnnotationbasedApproach上写着:

  

使用基于注释的方法   不用担心   序列化/反序列化   这是注入的依赖关系   自动处理,   依赖关系由。表示   可序列化代理

我做错了什么?

3 个答案:

答案 0 :(得分:3)

你知道如何注射豆子吗?

  1. 通过组件初始化(即组件并由SpringComponentInjector填充)
  2. 使用InjectorHolder.getInjector()的其他一些对象.inject(this)?
  3. 直接由弹簧注入(即,这是一个弹簧bean,其属性由Spring配置设置)
  4. 案例1和案例2将使用wicket-spring集成,并使用可序列化的wicket代理包装bean。 案例3只会在没有包装的情况下为您提供任何弹簧传递。

答案 1 :(得分:2)

首先,确保你的bean真的被代理了。默认情况下,spring不会创建代理。

其次,检查您的代理策略 - 是否为proxy-target-class="true"。如果是false,则(afaik)对对象的引用存储在JDK代理的调用处理程序中,并尝试序列化。

因此,如果您需要,您还需要制作课程Serializable

答案 2 :(得分:1)

您能否仔细检查您的应用程序类中是否添加了实例化侦听器:

addComponentInstantiationListener(new SpringComponentInjector(this));

此外,这仅适用于Wicket组件中的字段,而不适用于任意类。

另见wicket @SpringBean can not create bean