Java SpringBean的Wicket不';t创建可序列化的代理
使用上面的命令时,我收到java.io.NotSerializableException。这是因为loc是不可序列化的,但这不应该是问题,因为springbean是可序列化的代理。 我使用的是wicket spring库,作为injector SpringComponentInjector,其中wrapInProxies默认设置为true,所以我认为应该创建代理,但它们不是 页面上写着: 使用基于注释的方法,您可以 不用担心 数据的序列化/反序列化 注入的依赖项就是这样 自动处理,该 依赖项由 可序列化代理Java SpringBean的Wicket不';t创建可序列化的代理,java,spring,wicket,Java,Spring,Wicket,使用上面的命令时,我收到java.io.NotSerializableException。这是因为loc是不可序列化的,但这不应该是问题,因为springbean是可序列化的代理。 我使用的是wicket spring库,作为injector SpringComponentInjector,其中wrapInProxies默认设置为true,所以我认为应该创建代理,但它们不是 页面上写着: 使用基于注释的方法,您可以 不用担心 数据的序列化/反序列化 注入的依赖项就是这样 自动处理,该 依赖项由
我做错了什么?首先,确保您的bean确实被代理。默认情况下,spring不创建代理 其次,检查代理策略-是否为
proxy target class=“true”
。如果为false
,(afaik)对对象的引用将存储在JDK代理的调用处理程序中,并尝试序列化
因此,如果需要的话,您还需要使类可序列化。是否可以再次检查实例化侦听器是否已添加到应用程序类中: AddComponentInstanceListener(新的SpringComponentInjector(this)) 此外,这只适用于Wicket组件中的字段,而不适用于任意类
另请参见您知道bean是如何注入的吗
案例3只为您提供spring传递给您的任何内容,而不进行包装。在这种情况下,实际上是Wicket创建代理(它在具体类的封面下使用CGLib,在接口上使用常规Java代理)。嗯..我使用InjectorHolder.getInjector().Injector(这),因为该类不是Wicket组件,所以bean应该是可序列化的。那么您确定是loc违反了不可序列化的规定吗?这里还有其他原因吗?这是我的错误,我没有注意到我对模拟应用程序有不同的配置(wrapInProxies设置为false)。我已经改变了,一切正常。对不起打扰你了+1原因很简单,因为这是我第一次听到提到wrapInProxies,我设法找到了它(我自己没有编写应用程序类),它解决了我所有的问题:)
@SpringBean
PDLocalizerLogic loc;