@SpringBean
PDLocalizerLogic loc;
使用上面的时候,我会收到java.io.NotSerializableException。这是因为loc不可序列化,但这不应该是问题,因为spring bean是可序列化的代理。 我正在使用wicket-spring库,并且作为注入器SpringComponentInjector,其中wrapInProxies默认设置为true,所以我认为应该创建代理,但它们不是。
在页面https://cwiki.apache.org/WICKET/spring.html#Spring-AnnotationbasedApproach上写着:
使用基于注释的方法 不用担心 序列化/反序列化 这是注入的依赖关系 自动处理, 依赖关系由。表示 可序列化代理
我做错了什么?
答案 0 :(得分:3)
你知道如何注射豆子吗?
案例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组件中的字段,而不适用于任意类。