我正在使用 Spring 3 和 Hibernate 3.6 开发 Web 应用程序。我有一些问题要问@Transactional
注释和代码结构。
-> 当我使用@Transactional
(使用 Spring 进行事务管理),我是否必须围绕@Transactional
- 调用时使用 try/catch 带注释的方法?
例如,当我得到一个加载、更改并返回一个对象的方法时,我从另一个类调用它:我是否必须用 try/catch 包围该调用?也许出了问题,没有返回对象,数据库连接失败..我不知道。
直到现在我还以为@Transactional
关心所有可能发生的异常,并在发生错误时回滚该事务中的每个操作。
但如果发生这种情况,我必须以某种方式通知用户。当我在 try 块中调用事务方法并回滚时,catch 块被激活吗?
我可以告诉用户“确实出了问题”。否则用户可能不会被告知?
或者检查是否有对象返回(if/else)就足够了,那么我不需要try/catch?
我是新人,我想听听其他人如何构建他们的代码。谢谢 :-)
处理异常 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers在 Spring 中使用 HandlerExceptionResolvers 和 @ExceptionHandlers 确实很容易。我倾向于专门使用@ExceptionHandler。
您可以使用@ExceptionHandler http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers处理特定的异常,而不是在 try-catch 块中自行处理。
如果用户想要的资源未找到,而您想要发送 404。
@ExceptionHandler(NotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public void handleNotFoundException(NotFoundException exc) {
// log something.
}
如果服务器出现问题,您想要发送 500
@ExceptionHandler(SomeException.class)
public void handleException(SomeException exc, WebRequest request, HttpServletResponse response) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Sorry dude, my server broke");
}
您还应该严格处理异常。一般来说你不应该这样做@ExceptionHandler(Exception.class)
我也相信它是按顺序工作的,所以如果你确实处理一般异常,它应该是类中的最后一个方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)