Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在spring boot wicket应用程序中注入RequestScope bean_Java_Spring Boot_Wicket - Fatal编程技术网

Java 如何在spring boot wicket应用程序中注入RequestScope bean

Java 如何在spring boot wicket应用程序中注入RequestScope bean,java,spring-boot,wicket,Java,Spring Boot,Wicket,在我的Wicket页面中,我有: @SpringBean protected J2EContext j2EContext; 在配置中,我有: @Bean @RequestScope public J2EContext getWebContext() { return new J2EContext(request, response, getSessionStore()); } @Bean public RequestContextListener requestContextLis

在我的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想要注入
J2EContext
bean时。我认为这是因为页面是在
@RequestScope
创建这个bean之前呈现的。知道如何解决这个问题吗?

要注入beans,Wicket会以两种不同的方式创建代理:

  • 如果bean是一个接口,则会创建一个标准的java.lang.reflect.Proxy
  • 如果bean是一个类,那么默认情况下使用cglib

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

要注入bean,Wicket将以两种不同的方式创建代理:

  • 如果bean是一个接口,则会创建一个标准的java.lang.reflect.Proxy
  • 如果bean是一个类,那么默认情况下使用cglib

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

nice它就像一个符咒。这也是保存解决方案吗?我希望我没有破坏某些wicket功能。是的,它是安全的,wicket会自动检查objenesis是否可用,如果可用,它会使用它而不是cglib。很好,它就像一个符咒。这也是保存解决方案吗?我希望我没有破坏wicket的某些功能。是的,它是安全的,wicket会自动检查Objensis是否可用,如果可用,它会使用它而不是cglib。