在自定义的 Repository 中,可以按照以下步骤使用@Repository
注解来实现异常转换:
一、创建自定义 Repository 类
假设我们有一个自定义的用户数据访问类UserRepositoryCustomImpl
,它实现了一个自定义的接口UserRepositoryCustom
。
import org.springframework.stereotype.Repository;
@Repository
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
// 实现自定义的数据访问方法
public void customMethod() {
try {
// 假设这里进行数据库操作时可能抛出数据库特定异常
// 例如:throw new java.sql.SQLException("Database error");
} catch (Exception e) {
// 这里可以进行一些特定于数据库异常的初步处理,但通常会被代理对象捕获并转换
throw e;
}
}
}
二、定义自定义接口
public interface UserRepositoryCustom {
void customMethod();
}
三、在服务层使用自定义 Repository
在服务层,可以注入并使用这个自定义的 Repository。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final UserRepositoryCustom userRepositoryCustom;
@Autowired
public UserService(UserRepositoryCustom userRepositoryCustom) {
this.userRepositoryCustom = userRepositoryCustom;
}
public void performBusinessLogic() {
try {
userRepositoryCustom.customMethod();
} catch (Exception e) {
// 这里捕获到的是经过转换后的 Spring 的 DataAccessException 体系中的异常
System.out.println("Caught data access exception: " + e.getMessage());
}
}
}
当在UserRepositoryCustomImpl
中的方法抛出数据库特定异常时,由于该类被标注为@Repository
,Spring 会通过代理对象捕获这个异常,并将其转换为 Spring 的DataAccessException
体系中的异常,然后在服务层可以统一处理这些异常。