如何在 spring boot wicket 应用程序中注入 RequestScope bean
How to inject RequestScope bean in spring boot wicket application
在我的 Wicket 页面中,我有:
@SpringBean
protected J2EContext j2EContext;
在配置中我有:
@Bean
@RequestScope
public J2EContext getWebContext() {
return new J2EContext(request, response, getSessionStore());
}
@Bean
public RequestContextListener requestContextListener() {
return new RequestContextListener();
}
应用程序启动正常,但当我转到主页时出现异常:
Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931)
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:
329)
at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.apply(AbstractClassGenerator.java:93)
at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.apply(AbstractClassGenerator.java:91)
at net.sf.cglib.core.internal.LoadingCache.call(LoadingCache.java:54)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
当 wicket 想要注入 J2EContext
bean 时。我认为这是因为页面在 @RequestScope
创建此 bean 之前呈现。知道如何解决这个问题吗?
注入 bean Wicket 以两种不同的方式创建代理:
- 如果 bean 是一个接口,则会创建标准 java.lang.reflect.Proxy
- 如果bean是一个class默认使用cglib
不幸的是,如果没有默认构造函数,cglib 无法为 classes 创建代理。然而,还有第三种方法可以解决这个问题。只需将 objenesis 添加为项目的依赖项,Wicket 就会使用它而不是 cglib。
在我的 Wicket 页面中,我有:
@SpringBean
protected J2EContext j2EContext;
在配置中我有:
@Bean
@RequestScope
public J2EContext getWebContext() {
return new J2EContext(request, response, getSessionStore());
}
@Bean
public RequestContextListener requestContextListener() {
return new RequestContextListener();
}
应用程序启动正常,但当我转到主页时出现异常:
Caused by: java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given
at net.sf.cglib.proxy.Enhancer.emitConstructors(Enhancer.java:931)
at net.sf.cglib.proxy.Enhancer.generateClass(Enhancer.java:631)
at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:
329)
at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)
at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.apply(AbstractClassGenerator.java:93)
at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.apply(AbstractClassGenerator.java:91)
at net.sf.cglib.core.internal.LoadingCache.call(LoadingCache.java:54)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
当 wicket 想要注入 J2EContext
bean 时。我认为这是因为页面在 @RequestScope
创建此 bean 之前呈现。知道如何解决这个问题吗?
注入 bean Wicket 以两种不同的方式创建代理:
- 如果 bean 是一个接口,则会创建标准 java.lang.reflect.Proxy
- 如果bean是一个class默认使用cglib
不幸的是,如果没有默认构造函数,cglib 无法为 classes 创建代理。然而,还有第三种方法可以解决这个问题。只需将 objenesis 添加为项目的依赖项,Wicket 就会使用它而不是 cglib。