UndeclaredThrowableException异常
动态代理JDK动态代理和CGLIB动态代理两种方式均会产生UndeclaredThrowableException异常
JDK动态代理
异常:
Exception in thread “main” java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy0.buy(Unknown Source)
at com.test.handler.JdkTest.main(JdkTest.java:15)
Caused by: java.io.IOException: 123123
at com.test.handler.BuyHandler.invoke(BuyHandler.java:28)
… 2 more
解决方案:
接口throws真实的异常信息
CGLIB动态代理
原生的CGLIB动态代理并不会产生,但是spring cglib方式会产生这种异常
原生的代理对象:
spring cglib代理对象
spring cglib有设置专门的class代理对象生产策略:
解决方案:方法抛出真实的异常信息,建议不要使用@SneakyThrows抛出异常,或者aop拦截器统一抛出runtime异常