我正在使用spring + hibernate用于桌面应用程序。
我正在尝试使用分层实现来构建它,所以我有:
GUI层 - 调用 - >服务层 - 呼叫 - > 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..
}
问题是:谁抛出异常以及谁处理它?</ p> 我认为DAO必须抛出第一个异常,并且服务层重新抛出它,最后GUI层处理异常,所以我可以向用户显示消息,这个好吗? 有一种方法可以使用spring构建一些ExceptionHandler吗?
使用spring + hibernate管理异常的最佳做法是什么?
感谢。
答案 0 :(得分:4)
我建议在你自己的异常类中包装抛出的异常并让它们冒泡到GUI层。
答案 1 :(得分:3)
如果您正在使用Spring MVC,那么就可以找到ExcpetionHandlerResolver
的解决方案,看看documentation
如果您不使用Spring MVC。我建议将DAO中的异常抛出到Service,然后再抛到View层。根据捕获的异常,只有视图层才能真正为用户提供有价值的信息。