为什么弹簧代理不打印行号?
有时我会在日志中获得删除,但我看到行号未打印。我主要看到了春天的CGLIB代理。例如 在下面的堆栈跟踪中,我看到没有为spring管理的CustomerServiceBean代理打印行号。
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
at com.xeb.customer.account.CustomerServiceBean$$EnhancerByCGLIB$$5a0112c7.getCustomerDetails(<generated>)
at com.xeb.customer.account.CustomerUtil.getCustomerDetails(CustomerUtil.java:142)
知道为什么吗?是否有配置在代理中打印行号?
更新: - 我了解代理是在运行时生成的,所以打印它们的行是没有意义的(如果打印无关紧要)。但我的问题
如何才能在CustomerServiceBean.java
中获得代理CustomerServiceBean$$EnhancerByCGLIB$$5a0112c7.getCustomerDetails
背后的实际类的异常行?
答案 0 :(得分:0)
这些代理类是在运行时通过直接字节代码生成动态生成的。因此这些类没有相应的java源文件。
虽然分配(随机)行号在技术上是可行的,但这不是有意义的。
如果在类的代码中抛出异常,则堆栈跟踪将包含类的名称和相应的行号。
作为(假设的)示例,基于您提供的堆栈跟踪:
at com.xeb.customer.account.CustomerServiceBean.getCustomerDetails(CustomerServiceBean.java:<your linenumber>)
at ...
at java.lang.reflect.Method.invoke(Method.java:...)
at ...
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
at com.xeb.customer.account.CustomerServiceBean$$EnhancerByCGLIB$$5a0112c7.getCustomerDetails(<generated>)
at com.xeb.customer.account.CustomerUtil.getCustomerDetails(CustomerUtil.java:142)