我在桌面应用程序中使用spring + hibernate。
我正在尝试使用分层实现来构建它,所以我有:
GUI层–call- >服务层–call-> DAO层
一个更好地说明我的情况的小例子:
// In GUI layer private void actionPerformed(ActionEvent evt){ addUser(); } private void addUser(){ // Check gui validation for user inputs if(inputIsValid()){ String username=nameText.getText(); String pass=passText.getText(); //Now call service layer userService.createUser(username, pass); // Now here i want to show a message to user like // "Operation successful" or "Operation failed" // or more sofisticated message like "User with same name already exists" } } // Service layer @Transactional public void createUser(String name, String pass){ User user=new User(name, pass); userDao.save(user); } // Another service layer example, @Transactional public boolean createUser(String name, String pass){ User user=new User(name, pass); try{ userDao.save(user); } catch(Exception ex){ Log(ex); return false; } return true; // In this case GUI layer can know if save is succesful, but it can't know WHY // the save is failed : some username? DB service shutdown? etc.. }
问题是:谁抛出异常并由谁处理?
我认为DAO必须抛出第一个异常,然后服务层将其抛出,最后GUI层处理该异常,这样我才能向用户显示消息,这很好吗?有没有一种方法可以使用spring构建一些ExceptionHandler?
使用spring + hibernate管理异常的最佳实践是什么?
谢谢。
如果您使用的是Spring MVC,那么有一种解决方案,ExcpetionHandlerResolver请看一下文档上的内容
ExcpetionHandlerResolver
如果您不使用Spring MVC。我建议将异常从DAO抛出到Service,然后到View层。只有视图层才能根据捕获到的异常向用户真正提供有价值的信息。