Spring MVC Web 应用程序:
我有一个不带行号的堆栈跟踪(显示在底部)。
我认为这是由于 CGLib 在控制器上运行所致。但这对我来说很奇怪,实际的异常发生在ServerBatchRemoteRequestAcceptor
,一个没有注入的pojo,不是控制器。它仅在 Controller 对象中创建。
Example:
@Controller
class MyController {
MyPojo pojo = new MyPojo();
@RequestMapping("myaction")
public void doMyAction(){
pojo.methodToCauseNullPointerException()
}
}
java.lang.NullPointerException
at mycommons.services.batchremoteprocessor.ServerBatchRemoteRequestAcceptor.acceptRequest(Unknown Source)
at com.proxyandvpn.web.controllers.RESTServicesController.handleGenericClientRequest(Unknown Source)
at com.proxyandvpn.web.controllers.RESTServicesController$$FastClassByCGLIB$$dff24f0f.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)
有人可以向我解释这种行为吗?由于 CGLib,我的控制器下的每个调用都会没有行号吗?
我应该将控制器写入接口以便使用代理吗?这正常吗?我这样做是为了服务,但将控制器作为简单的 POJO 来完成。
Spring 使用 CGLIB 生成位于某些组件/控制器前面的代理对象。对这些组件的调用通过 CGLIB 代理传递。这些代理是在运行时生成的,没有源代码,因此它们没有行号。
不过,您几乎可以忽略提到 CGLIB 的堆栈跟踪行 - 假装它们不存在,它们应该是透明的。
在您的堆栈跟踪中,调用RESTServicesController.handleGenericClientRequest
已被代理,但呼叫仍在到达那里。 NPE 发生在ServerBatchRemoteRequestAcceptor
,它正在被调用RESTServicesController.handleGenericClientRequest
.
但是,您发布的源代码与堆栈跟踪无关,因此很难评论它发生的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)