java - 如何在 Spring Boot wicket 应用程序中注入(inject) RequestScope bean

标签 java spring-boot wicket

在我的 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$3.apply(AbstractClassGenerator.java:93)
    at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91)
    at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)

当 wicket 想要注入(inject) J2EContext bean 时。我认为这是因为页面是在 @RequestScope 创建此 bean 之前渲染的。知道如何解决这个问题吗?

最佳答案

注入(inject) bean Wicket 以两种不同的方式创建代理:

  • 如果 bean 是一个接口(interface),则会创建标准 java.lang.reflect.Proxy
  • 如果bean是一个类,则默认使用cglib

不幸的是,cglib 无法为没有默认构造函数的类创建代理。然而还有第三种方法可以解决这个问题。只需将 objenesis 添加为项目的依赖项,Wicket 就会使用它而不是 cglib。

关于java - 如何在 Spring Boot wicket 应用程序中注入(inject) RequestScope bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54999238/

相关文章:

java - 如何在 Java 代码中访问 Spring 执行器健康检查的结果?

wicket - 如何获取 Wicket 共享资源的 URL?

java - 从内部类访问通用外部类字段而不进行强制转换

java - 将字符串文件作为整数读取到数组中?

spring - 使用 AspectJ LTW 在非公共(public)方法的自调用和相关注意事项上允许 spring 代理功能

java - Wicket 口 :head meta on all extended pages

gwt - 架构问题 : GWT or Vaadin to create Desktop Application?

java - 更改用户配置文件 chrome selenium webdriver

java - 如何为JUnit测试用例禁用EhCache

java - 我的业务代码什么时候真正执行?