Java SpringBean的Wicket不';t创建可序列化的代理

Java SpringBean的Wicket不';t创建可序列化的代理,java,spring,wicket,Java,Spring,Wicket,使用上面的命令时,我收到java.io.NotSerializableException。这是因为loc是不可序列化的,但这不应该是问题,因为springbean是可序列化的代理。 我使用的是wicket spring库,作为injector SpringComponentInjector,其中wrapInProxies默认设置为true,所以我认为应该创建代理,但它们不是 页面上写着: 使用基于注释的方法,您可以 不用担心 数据的序列化/反序列化 注入的依赖项就是这样 自动处理,该 依赖项由

使用上面的命令时,我收到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是如何注入的吗

  • 通过组件初始化(即组件并由SpringComponentInjector填写)
  • 使用InjectorHolder.getInjector()的其他对象。注入(此)
  • 由spring直接注入(即,这是一个Springbean,其中属性由spring配置设置)
  • 案例1和案例2将使用wicket-spring集成,并使用可序列化的wicket代理包装bean。
    案例3只为您提供spring传递给您的任何内容,而不进行包装。

    在这种情况下,实际上是Wicket创建代理(它在具体类的封面下使用CGLib,在接口上使用常规Java代理)。嗯..我使用InjectorHolder.getInjector().Injector(这),因为该类不是Wicket组件,所以bean应该是可序列化的。那么您确定是loc违反了不可序列化的规定吗?这里还有其他原因吗?这是我的错误,我没有注意到我对模拟应用程序有不同的配置(wrapInProxies设置为false)。我已经改变了,一切正常。对不起打扰你了+1原因很简单,因为这是我第一次听到提到wrapInProxies,我设法找到了它(我自己没有编写应用程序类),它解决了我所有的问题:)
    @SpringBean
    PDLocalizerLogic loc;