jfinal Duang.duang(RoleService.class) 使用后无法抛自定义异常
jfinal 2.0 使用了Duang.duang(RoleService.class);后,无法使用自定义异常throw new EntityException("entity[ "+role.toString()+" ] already exists"); 变成了runtime异常,求大神知道么为什么吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
马 刚遇到了
感谢
mark,这个问题之前也碰到过。
引用来自“JFinal”的评论
是在哪个地方不能使用自定义异常/
是在哪个地方不能使用自定义异常/
感谢!!!
这个问题之前碰到过,业务异常的话我是用Runtime接住,然后手工throw出来的
感谢
因为Duang.duang时回掉CallBack对象,callback对象执行作用在target对象上的intercept逐一执行;也就调用了Invocation.invoke方法,在invoke中产生的异常全部throw成RuntimeException了
让 EntityException 继承自 RuntimeException 即可打完收工。
原因是:jfinal aop 的 Invocation.invoke() 在捕获到异常以后,如果是 RuntimeException则会原样向外抛出,否则会 new RuntimeException(e) 包装一下向外抛出。如果不这样做就需要让 Invocation.invoke() 方法明确抛出 Excetpion,进而也强制了 Interceptor.intercept(inv) 方法要抛出 Exception,进而就使用开发者在Interceptor.intercept(inv) 不需要 try catch 任何异常,进而就导致了开发者忘了在 catch 块中回收资源。
这终究是个设计的考虑,所以还是让你的自定义异常继承 RuntimeException 更好。