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

问题描述 投票:1回答:1

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

java spring-boot wicket
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.